我试图了解Popen方法。我目前在同一目录中有三个python文件:test.py,hello.py和bye.py。 test.py是包含subprocess.Popen方法的文件,而hello和bye是简单的hello world和goodbye world文件,即它们仅包含单个打印。
如果我这样做:
import subprocess
from subprocess import PIPE
tst = subprocess.Popen(["python", "hello.py"], stdout=PIPE, stderr=PIPE)
(out,err) = tst.communicate()
[一切似乎都可以正常工作,在shell中为hello.py获得正确的“ Hello World”打印,并在bye.py处执行相同的操作,shell会按照需要打印“ GoodBye World”。
当我要运行两个文件时,问题就开始了,
import subprocess
from subprocess import PIPE
tst = subprocess.Popen(["python", "hello.py", "python", "bye.py"], stdout=PIPE, stderr=PIPE)
(out,err) = tst.communicate()
这只会返回第一个.py文件的打印,然后返回
[WinError 2 ] The system cannot find the file specified
如果我还删除了第二个“ python”,就会发生这种情况。为什么会这样?
如果我还删除了第二个“ python”,就会发生这种情况。为什么会这样?
正在运行
subprocess.Popen(["python", "hello.py", "python", "bye.py"]
类似于跑步
$ python hello.py python bye.py
实际上并没有多大意义,因为这被解释为将参数hello.py python bye.py
传递给python
。
因此,这是您的问题“我正在尝试理解Popen方法”的第1部分。
在不知道您实际想要使用此概念证明做什么的情况下,您有几种选择;依次调用多个Popen()
,或将分号与shell=True
一起使用,但请务必考虑该字符的security implications:# This will also break on Windows
>>> import subprocess as sp
>>> sp.check_output("python -V ; python -V", shell=True)
b'Python 3.8.2\nPython 3.8.2\n'