0

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

目的:必须将参数从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 新手。

4

3 回答 3

1

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

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

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

于 2013-02-06T08:11:09.753 回答
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) 
于 2013-02-06T07:45:41.043 回答
0

我认为错误很清楚:“execv() arg 2 must contain only strings”,而您将整数作为第一个参数传递。将整数转换为字符串可以用str()

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

subprocess.call([arg, str(lan1)], shell = True)
于 2013-02-06T08:15:40.010 回答