我现在已经读懂了很多线程,但真的很迷路。
在变得复杂之前,只需尝试做一些基本的事情。
所以我有一个脚本test.py
我想从runme.py内调用脚本,但不等待,因此它将处理其他代码块,但是到最后,请等待test.py代码完成再继续。
我似乎无法找出p =子进程的正确语法。Popen(我尝试了很多)
,如果它在同一目录中,我是否需要在test.py中使用它?
这是我所拥有的但无法上班。
import subprocess
p = subprocess.Popen(['python test.py'])
#do some code
p.wait()
答案 0 :(得分:1)
我似乎无法找出p =子进程的正确语法。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.path.abspath(os.path.dirname(sys.argv[0]))
存放在主脚本中,然后将其传递给其他函数供他们使用,而不是自己调用dirname(argv[0])
。 >