从python脚本调用.exe文件时出错

从python脚本调用.exe文件时出错,python,wxpython,subprocess,exe,Python,Wxpython,Subprocess,Exe,我对GUI使用wxpython,对脚本使用bash。我必须使用子进程从Python脚本运行.exe文件 目的:必须将参数从GUI传递到.exe文件,并且没有检查该参数的权限 我遇到问题的部分代码是: import subprocess def OnBound(self,event): lan1 = self.sc1.Getvalue() ##interger value arg = ('home/proj/lic.exe') subprocess.call([lan1, arg], shell

我对GUI使用
wxpython
,对脚本使用bash。我必须使用子进程从Python脚本运行
.exe
文件

目的:必须将参数从GUI传递到
.exe
文件,并且没有检查该参数的权限

我遇到问题的部分代码是:

import subprocess
def OnBound(self,event):
lan1 = self.sc1.Getvalue() ##interger value
arg = ('home/proj/lic.exe')
subprocess.call([lan1, arg], shell = True)
每当我运行脚本时,都会出现以下错误:

Traceback (most recent call last)
File "/usr/lib/python 2.7/subprocess.py", line 493, in call return popen(*popnargs, **kwargs).wait()
File "/usr/lib/python 2.7/subprocess.py", line 679, in __init__errread,errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1239, in _execute_child raise child_exception
Type error: execv() arg 2 must contain only strings

我在这里做错了什么?任何帮助/建议都会很有帮助,因为我是python新手。

我不确定您想要完成什么,但是我可以使用

import subprocess
subprocess.call([123, 'ls'], shell = True)

在这两种情况下,我都将垃圾作为列表值之一传递(第一种情况下为整数,第二种情况下为元组)

代码中的注释表明
lan1
是一个整数,因此您尝试运行类似

123 home/proj/lic.exe
这没有道理

另外,像这样使用
子流程
更简单:

subprocess.call("ls -l | grep test", shell=True) 

subprocess.call的第一个参数中的所有项必须是字符串:

rc = subprocess.call(['/home/proj/lic.exe', str(lan1)])

此外,您不应该调用可能会从GUI事件处理程序中阻塞很长时间的函数;它可以使您的GUI长期冻结。您可以调用
subprocess.Popen
立即返回,并安排一个空闲回调来定期轮询子流程状态。

我认为错误很明显:“execv()arg 2必须只包含字符串”,而您将整数作为第一个参数传递。 可以使用
str()

除此之外:
subprocess.call
接受一个字符串数组,其中第一个字符串是要调用的程序,其余的是要传递到此程序的参数。 因此,如果您想使用参数
123
(或
lan1
的任何值)调用
home/proj/lic.exe
,您应该切换顺序

subprocess.call([arg, str(lan1)], shell = True)

您需要发布正在运行的代码。@Brenbrn您知道如何传递参数吗?该参数适用于使用pythonarg=('home/proj/lic.exe')的命令行参数。这是一个元组,不是字符串,也不是字符串列表。不,它实际上是一个字符串。('home/proj/lic.exe',)将是一个元组
subprocess.call([arg, str(lan1)], shell = True)