繁体   English   中英

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

[英]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按原样传递给pythonpython会将其视为相对于当前工作目录 (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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM