Как передать вызов подпроцесса в текстовый файл?


subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml",  "/tmp/video_xml"])

сейчас у меня есть скрипт, который я запускаю. Когда я запускаю его, и он попадает в эту строку, он начинает печатать материал, потому что run.sh там есть отпечатки пальцев.

Как я могу передать это в текстовый файл также? (А также печатать, если это возможно)

2 62

2 ответа:

если вы хотите написать вывод в файл, вы можете использовать stdout-аргумент subprocess.call.

проходит None,subprocess.PIPE объект файла или файлового дескриптора. Первый-это значение по умолчанию, stdout наследуется от родителя (вашего скрипта). Второй позволяет передавать данные из одной команды/процесса в другой. Третий и четвертый-это то, что вы хотите, чтобы результат был записан в файл.

вам нужно открыть файл с что-то вроде open и передать объект или файловый дескриптор целое число до call:

f = open("blah.txt", "w")
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml",  "/tmp/video_xml"], stdout=f)

Я предполагаю, что любой действительный файлоподобный объект будет работать, как сокет (gasp :)), но я никогда не пробовал.

как marcog упоминает в комментариях вы можете перенаправить stderr, а также, вы можете перенаправить это в том же месте, что и stdout с stderr=subprocess.STDOUT. Любое из вышеперечисленных значений также работает, вы можете перенаправить в разные места.

варианты popen можно использовать в call

args, 
bufsize=0, 
executable=None, 
stdin=None, 
stdout=None, 
stderr=None, 
preexec_fn=None, 
close_fds=False, 
shell=False, 
cwd=None, 
env=None, 
universal_newlines=False, 
startupinfo=None, 
creationflags=0

так...

subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml",  "/tmp/video_xml"], stdout=myoutput)

затем вы можете делать то, что вы хотите с myoutput (который должен быть файл BtW).

кроме того, вы можете сделать что-то ближе к конвейерному выходу, как это.

dmesg | grep hda

будет:

p1 = Popen(["dmesg"], stdout=PIPE)
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
output = p2.communicate()[0]

есть много прекрасной, полезной информации о страница руководства python.