Как передать вызов подпроцесса в текстовый файл?
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"])
Теперь у меня есть script, который я запускаю. Когда я запускаю его, и он попадает в эту строку, он начинает печатать материал, потому что run.sh имеет в нем отпечатки.
Как мне передать это в текстовый файл? (И также распечатать, если возможно)
Ответы
Ответ 1
Если вы хотите записать вывод в файл, вы можете использовать stdout -аргумент subprocess.call
.
Требуется None
, subprocess.PIPE
, файловый объект или файловый дескриптор. Первый по умолчанию: stdout наследуется от родителя (ваш script). Второй позволяет вам переходить от одной команды/процесса к другой. Третья и четвертая - это то, что вы хотите, чтобы результат был записан в файл.
Вам нужно открыть файл с чем-то вроде 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
. Любое из вышеупомянутых значений работает также, вы можете перенаправить в разные места.
Ответ 2
Параметры 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.