Как передать вызов подпроцесса в текстовый файл?
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"])
сейчас у меня есть скрипт, который я запускаю. Когда я запускаю его, и он попадает в эту строку, он начинает печатать материал, потому что run.sh там есть отпечатки пальцев.
Как я могу передать это в текстовый файл также? (А также печатать, если это возможно)
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.