我有一个python脚本,想从中调用一个子进程。以下示例可以正常工作:
脚本1:
from subprocess import Popen
p = Popen('python Script2.py', shell=True)
Script2:
def execute():
print('works!')
execute()
但是,当我想将变量传递给函数时,出现以下错误:
def execute(random_variable: str):
SyntaxError: invalid syntax
脚本1:
from subprocess import Popen
p = Popen('python Script2.py', shell=True)
Script2:
def execute(random_variable: str):
print(random_variable)
execute(random_variable='does not work')
有人知道为什么会这样吗?在网上找不到有关它的任何信息:(
Python类型提示在python3.5
中引入。如果您使用的版本低于python3.5
,则它将引发此错误。
def execute(random_variable: str):
^
SyntaxError: invalid syntax
这就是第一个脚本起作用而后来的脚本失败的原因。
您可以使用Subprocess模块的调用方法来实现所需的功能。
import subprocess
subprocess.call('python script2.py', shell=True)
#The following code can take in any number of parameters.
def execute(arg):
print('works!',arg)
execute("hello")
请理解,在popen未阻塞的情况下,调用方法正在阻塞。
call('notepad.exe')
print('hello') # only executed when notepad is closed
Popen('notepad.exe')
print('hello') # immediately executed
您必须使用sys模块因为popen将命令行参数发送给程序,例如
import sys
def fun(arg):
print(arg)
fun(sys.argv)
并在窗口中将参数传递为popen as ..#
import subprocess
p = subprocess.Popen(['start', 'python', 'pyqt.py', 'hello'], shell=True)
好人,找到了解决方案:只需使用'python3'而不是'python'...:
p = Popen('python3 Script2.py', shell=True)
谢谢您的帮助! :)