如何将subprocess调用传递给文本文件?
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"])
现在我有一个脚本,我跑。 当我运行它,它击中这条线,它开始打印的东西,因为run.sh打印在它。
我如何将这个pipe道文本文件? (如果可能,也打印)
如果你想把输出写到一个文件中,你可以使用subprocess.call的stdout -argument。
它采用None
, subprocess.PIPE
,一个文件对象或一个文件描述符。 第一个是默认的,stdout是从父(你的脚本)inheritance的。 第二个允许你从一个命令/进程pipe道到另一个。 第三和第四是你想要的,有输出写入文件。
你需要打开一个类似打开的文件,并传递对象或文件描述符整数来call
:
f = open("blah.txt", "w") subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=f)
我猜测任何有效的文件类对象将工作,像一个套接字(喘气:)),但我从来没有尝试过。
正如marcog在注释中提到的,你也可能想redirectstderr,你可以用stderr=subprocess.STDOUT
subprocess.STDOUT将它redirect到stdout所在的位置。 以上提到的任何值都适用,您可以redirect到不同的地方。
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)
然后,你可以用我的输出做什么(这将需要一个文件btw)。
此外,你可以做一些更接近像这样的pipe道输出。
dmesg | grep hda
将会:
p1 = Popen(["dmesg"], stdout=PIPE) p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE) output = p2.communicate()[0]
在Python手册页上有很多可爱的,有用的信息。