从python脚本调用.exe文件时出错
我对GUI使用从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
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)