Как получить данные из командной строки из программы Python?

Я хочу запустить программу командной строки из сценария python и получить результат.

Как получить информацию, отображаемую foo, чтобы я мог использовать ее в своем сценарии?

Например, я вызываю foo file1 из командной строки и печатает

 Size: 3KB Name: file1.txt Other stuff: blah 

Как я могу получить имя файла, делающее что-то вроде filename = os.system('foo file1') ?

  • Интерактивный ввод / вывод с использованием python
  • Что такое метакласс в Python?
  • Apache Spark: как использовать pyspark с Python 3
  • Эффективный массив Python с 100 миллионами нулей?
  • Почему семена случайного генератора не стабильны между версиями Python?
  • Сохранение модуля imgproc для малины python
  • Python Pandas объединяет данные в индексе
  • Есть ли символ линии вверх? (Напротив \ n)
  • 5 Solutions collect form web for “Как получить данные из командной строки из программы Python?”

    Используйте модуль подпроцесса:

     import subprocess command = ['ls', '-l'] p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.IGNORE) text = p.stdout.read() retcode = p.wait() 

    Затем вы можете делать все, что хотите, с переменным text : регулярное выражение, расщепление и т. Д.

    Второй и третий параметры subprocess.Popen являются необязательными и могут быть удалены.

    Самый простой способ получить выход инструмента, вызванного вашим скриптом Python, – использовать модуль подпроцесса в стандартной библиотеке. Посмотрите на subprocess.check_output .

     >>> subprocess.check_output("echo \"foo\"", shell=True) 'foo\n' 

    (Если ваш инструмент попадает из ненадежных источников, убедитесь, что вы не используете аргумент shell=True .)

    Это типично для сценария bash, который вы можете запустить в python:

     #!/bin/bash # vim:ts=4:sw=4 for arg; do size=$(du -sh "$arg" | awk '{print $1}') date=$(stat -c "%y" "$arg") cat<<EOF Size: $size Name: ${arg##*/} Date: $date EOF done 

    Изменить: как его использовать : откройте pseuso-terminal, затем скопируйте-вставьте это:

     cd wget http://pastie.org/pastes/2900209/download -O info-files.bash 

    В python2.4:

     import os import sys myvar = ("/bin/bash ~/info-files.bash '{}'").format(sys.argv[1]) myoutput = os.system(myvar) # myoutput variable contains the whole output from the shell print myoutput 

    В Python вы можете передать команду OS с пробелами, подзапросами и новыми символами в модуль subcommand чтобы мы могли анализировать текст ответа следующим образом:

    1. Сохраните это в test.py:

       #!/usr/bin/python import subprocess command = ('echo "this echo command' + ' has subquotes, spaces,\n\n" && echo "and newlines!"') p = subprocess.Popen(command, universal_newlines=True, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) text = p.stdout.read() retcode = p.wait() print text; 
    2. Затем запустите его так:

       python test.py 
    3. Какие принты:

       this echo command has subquotes, spaces, and newlines! 

    Если это не работает для вас, это может быть проблемой с версией python или операционной системой. Я использую Python 2.7.3 для Ubuntu 12.10 для этого примера.

    Это портативное решение в чистом питоне:

     import os import stat import time # pick a file you have ... file_name = 'll.py' file_stats = os.stat(file_name) # create a dictionary to hold file info file_info = { 'fname': file_name, 'fsize': file_stats [stat.ST_SIZE], 'f_lm': time.strftime("%m/%d/%Y %I:%M:%S %p",time.localtime(file_stats[stat.ST_MTIME])), } print(""" Size: {} bytes Name: {} Time: {} """ ).format(file_info['fsize'], file_info['fname'], file_info['f_lm']) 
    Python - лучший язык программирования в мире.