0

wxpythonGUIに使用し、スクリプトに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

最初の引数として整数を渡している間、エラーは非常に明確だと思います。「execv()arg2には文字列のみが含まれている必要があります」。整数から文字列への変換は、str()

それとは別に、subprocess.call文字列の配列を取ります。最初の文字列は呼び出されるプログラムであり、残りはこのプログラムに渡される引数です。したがってhome/proj/lic.exe、引数123(またはの値lan1)を使用して呼び出す場合は、順序を切り替える必要があります。

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

あなたが何を達成しようとしているのかわかりませんが、私はあなたのエラーを使用して再現することができます

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

また

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

どちらの場合も、リスト値の1つとしてガベージを渡します(最初のケースでは整数、2番目のケースではタプル)。

コード内のコメントはそれlan1が整数であることを示しているので、次のようなものを実行しようとしています

123 home/proj/lic.exe

これは意味がありません。

subprocessまた、次のように使用する方が簡単です。

subprocess.call("ls -l | grep test", shell=True) 
于 2013-02-06T07:45:41.043 に答える