Python subprocess.Popen用于多个python脚本

问题描述 投票:0回答:1

我试图了解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
1个回答
0
投票

如果我还删除了第二个“ 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'

© www.soinside.com 2019 - 2024. All rights reserved.