【发布时间】:2020-09-07 06:04:51
【问题描述】:
我有一个简单的 def 存储在 C:/Users/admin/Desktop/sample.py,
import time, os
def cook(sec):
print('cooking started')
time.sleep(sec)
print(f'cooking done in {sec} sec(s) on process: {os.getpid()}')
我的目标是使用子进程库来运行 sample.py,我使用 anaconda 作为我的解释器
import subprocess
path = 'C:/ProgramData/Anaconda3/python.exe C:/Users/admin/Desktop/sample.py'
subprocess.run(path, shell=True)
如何将参数列表传递给 subprocess.run? 我尝试使用列表 [cook(1),cook(2),cook(3)] 加入路径。失败。我该怎么办? 理想情况下,传入一个列表并一个一个地运行def。 赞赏。
【问题讨论】:
-
我不明白你为什么使用
subpocess来调用 Python 函数。让你的程序import sample然后调用它的主函数。 -
是的,我试过了。实际上,这就是我向领导提出的建议。领导说NO。我们必须使用 subprocess 来调用 py 文件。知道我将如何实现这一目标吗?
-
使用 Windows \ 路径分隔符而不是 / 开始。将
r放在字符串的开头引号之前?这样您就不必转义它们:r'C:\...将参数放在sample.py之后的字符串中。在要求subprocess为您运行它之前,在控制台手动测试结果字符串。这样你会得到更多有用的错误信息。 -
你可以像这样传递参数:subprocess.run(["/path/to/python.exe", "/path/to/sample.py", "--parameter1 1234", " --parameter2 asd"]),但您必须修改您的 sample.py 以接受参数,请参阅docs.python.org/3.3/library/argparse.html
-
这是我从 termianl 得到的, CompletedProcess(args='C:/ProgramData/Anaconda3/python.exe C:/Users/admin/Desktop/sample.py "--parameter1"', returncode=0) 运行了吗?
标签: python shell subprocess