运行子进程调用另一个python脚本,而无需等待

运行子进程调用另一个python脚本,而无需等待,python,Python,我现在读了很多文章,真的迷路了 在我把事情复杂化之前,试着做一些基本的事情 所以我有一个脚本test.py 我想从runme.py中调用脚本,但不等待,因此它将处理另一段代码,但当它结束时,请等待test.py代码完成,然后再继续 我似乎无法找出p=subprocess.Popen的正确语法(我已经尝试了很多次) 如果test.py在同一个目录中,我是否需要将其添加到test.py 这是我有的东西,但我不能去上班 import subprocess p = subprocess.Popen(['

我现在读了很多文章,真的迷路了

在我把事情复杂化之前,试着做一些基本的事情

所以我有一个脚本test.py

我想从runme.py中调用脚本,但不等待,因此它将处理另一段代码,但当它结束时,请等待test.py代码完成,然后再继续

我似乎无法找出p=subprocess.Popen的正确语法(我已经尝试了很多次)

如果test.py在同一个目录中,我是否需要将其添加到test.py

这是我有的东西,但我不能去上班

import subprocess
p = subprocess.Popen(['python test.py'])
#do some code
p.wait()
我似乎无法找出p=subprocess.Popen的正确语法(我已经尝试了很多次)

您希望向其传递一个参数列表。第一个参数是要运行的程序,
python
(尽管实际上,您可能需要在这里);第二个是希望
python
运行的脚本。因此:

p = subprocess.Popen(['python', 'test.py'])

如果test.py在同一个目录中,我是否需要将其添加到test.py

这与在shell中运行
python test.py
的方式相同:它只需通过
test.py
,就像通过
python
一样,并且
python
将其视为相对于当前工作目录(CWD)的路径

因此,如果
test.py
在CWD中,这将正常工作

如果
test.py
在其他地方,则需要提供一个绝对路径或一个相对于CWD的路径

一个常见的问题是,
test.py
不一定在CWD中,而是与要启动它的脚本/模块位于同一目录中:

scriptpath = os.path.join(os.path.dirname(__file__), 'test.py')
…或与用于启动程序的主脚本位于同一目录中:1

无论哪种方式,您只需将其作为参数传递:

p = subprocess.Popen(['python', scriptpath])

一,。在某些平台上,这实际上可能是一条相对路径。如果您可能在启动后执行了一个
os.chdir
,那么现在就错了。如果需要处理这个问题,您需要在启动时将
os.path.abspath(os.path.dirname(sys.argv[0]))
存储在主脚本中,然后将其传递给其他函数供它们使用,而不是调用
dirname(argv[0])
本身。

在Python3上可以使用该模块。或者,以单独的方式执行。
p = subprocess.Popen(['python', scriptpath])