[英]Run subprocess to call another python script without waiting
我现在已经阅读了许多线程,但真的迷失了。
在我把它变得复杂之前,只是尝试做一些基本的事情。
所以我有一个脚本 test.py
我想从 runme.py 中调用脚本但不等待,因此它将处理其他代码块,但是当它结束时等待 test.py 代码完成,然后再继续。
我似乎无法弄清楚 p = subprocess.Popen 的正确语法(我尝试了很多)
如果 test.py 位于同一目录中,我是否需要它?
这是我所拥有的,但无法上班。
import subprocess
p = subprocess.Popen(['python test.py'])
#do some code
p.wait()
我似乎无法弄清楚 p = subprocess.Popen 的正确语法(我尝试了很多)
你想向它传递一个参数列表。 第一个参数是要运行的程序, python
(尽管实际上,您可能需要sys.executable
此处); 第二个是您希望python
运行的脚本。 所以:
p = subprocess.Popen(['python', '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
scriptpath = os.path.join(os.path.dirname(sys.argv[0]), 'test.py')
无论哪种方式,您只需将其作为参数传递:
p = subprocess.Popen(['python', scriptpath])
1. 在某些平台上,这实际上可能是相对路径。 如果您可能在启动os.chdir
做过os.chdir
,现在它会出错。 如果您需要处理它,您希望在启动时将os.path.abspath(os.path.dirname(sys.argv[0]))
在主脚本中,然后将其传递给其他函数以供他们使用自己调用dirname(argv[0])
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.