TIM*_*MEX 80 python unix linux shell subprocess
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"])
Run Code Online (Sandbox Code Playgroud)
现在我有一个我运行的脚本.当我运行它并且它击中这一行时,它开始打印东西,因为run.sh中有打印.
如何将其传输到文本文件?(还可以打印,如果可能的话)
Sku*_*del 140
如果要将输出写入文件,可以使用stdout -argument 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)
Run Code Online (Sandbox Code Playgroud)
我猜测任何有效的文件类对象都可以工作,就像socket(gasp :)),但我从来没有尝试过.
正如marcog在评论中提到的那样,您可能也想重定向stderr,您可以将其重定向到与stdout相同的位置stderr=subprocess.STDOUT.任何上述值都可以使用,您可以重定向到不同的位置.
oco*_*odo 18
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
Run Code Online (Sandbox Code Playgroud)
所以...
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=myoutput)
Run Code Online (Sandbox Code Playgroud)
然后你可以做你想要的myoutput(这需要是一个文件btw).
此外,您可以更接近像这样的管道输出.
dmesg | grep hda
Run Code Online (Sandbox Code Playgroud)
将会:
p1 = Popen(["dmesg"], stdout=PIPE)
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
output = p2.communicate()[0]
Run Code Online (Sandbox Code Playgroud)
python手册页上有很多可爱,有用的信息.