在我的Python脚本中调用.exe文件时出现错误
我在用 wxpython
做图形界面(GUI),用 bash 写脚本。我需要通过 Python 脚本来运行一个 .exe
文件,使用的是 subprocess 这个模块。
目的: 我必须把参数从图形界面传递给 .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
我不太确定你想要实现什么,不过我可以用以下代码重现你的错误:
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)
0
我觉得这个错误很明显:“execv() 的第二个参数必须只包含字符串”,而你传入了一个整数作为第一个参数。将整数转换成字符串可以用 str()
来实现。
另外,subprocess.call
需要一个字符串数组,第一个字符串是要调用的程序,后面的字符串是要传给这个程序的参数。所以如果你想用参数 123
(或者 lan1
的值)来调用 home/proj/lic.exe
,你需要调整一下顺序。
subprocess.call([arg, str(lan1)], shell = True)
1
在subprocess.call
的第一个参数里,所有的项目都必须是字符串,也就是文本形式的内容:
rc = subprocess.call(['/home/proj/lic.exe', str(lan1)])
另外,你不应该在图形用户界面(GUI)的事件处理程序中调用可能会长时间阻塞的函数;这样会让你的界面长时间卡住。你可以使用subprocess.Popen
来立即返回,然后安排一个空闲回调,定期检查子进程的状态。