将变量传递给函数时,Python子进程语法无效

问题描述 投票:0回答:4

我有一个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 subprocess syntax-error popen
4个回答
0
投票

Python类型提示在python3.5中引入。如果您使用的版本低于python3.5,则它将引发此错误。

    def execute(random_variable: str):
                               ^
SyntaxError: invalid syntax

这就是第一个脚本起作用而后来的脚本失败的原因。


0
投票

您可以使用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

0
投票

您必须使用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)


0
投票

好人,找到了解决方案:只需使用'python3'而不是'python'...:

p = Popen('python3 Script2.py', shell=True)

谢谢您的帮助! :)

© www.soinside.com 2019 - 2024. All rights reserved.