2017-01-21 9 views
0

Pythonスクリプトからいくつかの外部プログラムを呼び出し、スクリプト内でその出力を使用したい。今、私はこのスクリプトがローカルシステム上で実行されているが、別の言語を使用する別のシステムでは問題が発生することを発見しました。したがって、異なる言語の出力を調べる代わりに、これらのプログラムを最初の引数として指定した "LC_ALL = en_US.utf8"で呼び出す必要があります。へのコマンドであることをPythonスクリプトのサブプロセス.check_output()をLC_ALLで最初の引数として使用する

Traceback (most recent call last): 
    File "./serverwatch.py", line 22, in <module> 
    uptimedata = subprocess.check_output([lc, "/bin/uptime"]) 
    File "/usr/lib/python2.7/subprocess.py", line 537, in check_output 
    process = Popen(stdout=PIPE, *popenargs, **kwargs) 
    File "/usr/lib/python2.7/subprocess.py", line 679, in __init__ 
    errread, errwrite) 
    File "/usr/lib/python2.7/subprocess.py", line 1259, in _execute_child 
    raise child_exception 
OSError: [Errno 2] No such file or directory 

は私が(そのsubprocess.check_outputを理解して)最初の引数を望んでいる:私は、スクリプトを実行すると

lc = "LC_ALL=en_US.utf8" 
uptimedata = subprocess.check_output([lc, "/bin/uptime"]) 

は、私が手:しかし、サブプロセスがこれを好きではないようです呼び出される。どうすれば変更したLCでコマンドを実行できますか?

これはDebian WheezyのPython 2.7.3です。他のシステムは同じバージョンを実行しています。

答えて

0

はbashのを通して、あなたのコマンドを実行します。

>>> lc = "LC_ALL=en_US.utf8" 
>>> command = ["/usr/bin/bash", "-c", "%s /bin/uptime" % lc] 
>>> command 
['/usr/bin/bash', '-c', 'LC_ALL=en_US.utf8 /bin/uptime'] 
>>> uptimedata = subprocess.check_output(command) 
>>> uptimedata 
b' 13:26:01 up 17:43, 1 user, load average: 0.36, 0.41, 0.44\n' 
>>> 
関連する問題