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

时间:2013-02-06 05:22:58

标签: python wxpython subprocess exe

我使用wxpython用于GUI,使用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的新手。

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

我不确定你要完成什么,但我可以使用

重现你的错误
import subprocess
subprocess.call([123, 'ls'], shell = True)

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

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

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

的内容
123 home/proj/lic.exe

这没有意义。

使用subprocess这样更简单:

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

答案 2 :(得分:0)

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

完成

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

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