2017-08-01 12 views
0

Linuxマシン上で、ifconfig -a eht0というPythonスクリプトを使ってネットワークインタフェースの情報を取得しようとしています。私はPython:バックグラウンドサブプロセスからstdoutを取得する

python myScript.py 

または

python myScript.py & 

それが正常に動作しますが、それが実行されたときに、端末からスクリプトを実行している場合まあ

import subprocess 
proc = subprocess.Popen('ifconfig -a eth0', shell=True, stdout=subprocess.PIPE) 
proc.wait() 
output = proc.communicate()[0] 

:だから私は、次のコードを使用していますアクティブなシェルなしでバックグラウンド(crontabによって起動)から、私は出力を得ることができません。

ありがとうございました

+1

あなたはそれが(かどうか、バックグラウンドでまたはアクティブシェルで)働いていたかいないかどうかを確認するためにoutput' 'で何をしますか?それをファイルに保存しますか?そうであれば、ファイルは作成されますが、内容はなく、まったくファイルが作成されませんか? –

+0

'proc = subprocess.Popen(['ifconfig'、 '-a'、 'eth0']、stdout = subprocess.PIPE)'のように 'shell = True'を設定しないと、違いがありますか? –

+0

出力はリモートdbに送信され、端末iから実行されたときにデータを読み取ることができます。私が 'shell = False'を使うと、OSError:[Errno 2]そのようなファイルやディレクトリはありません.' – user3734366

答えて

1

「スクリーン」を使用しようとしましたか?

proc = subprocess.Popen('screen ifconfig -a eth0', shell=True, stdout=subprocess.PIPE) 

私はそれが動作するかどうかはわかりません。

+0

コメントでなければならないとわからない場合は、 –

+0

SO 50以上の評判は他の人の投稿にはコメントできません。 – orangeInk

+0

はい、私はコメントできません。以前私は同じ問題に出会った。ソリューションは私のために働いた。しかし、他の人には当てはまらないと確信しています – Toandd

0

通信の代わりにproc.stdout.readline()を試してください。また、subprocess.Popen()のstderr = subprocess.STDOUTが役に立ちます。結果を投稿してください。

+0

ターミナルからスクリプトを起動すると、完全な出力ではなく 'eth0 Link encap:Ethernet HWaddr 18:b2:23:a4:12:1e'となります。空の文字列。 – user3734366

+0

その後、proc.communicateを使用することをお勧めします。 2>&1で出力するために標準エラーをリダイレクトしようとしましたか? –

+0

また、crontabからスクリプトを起動し、スクリプトを呼び出す行の出力をリダイレクトしてみてください(関連性がありますが、私は強力なcrontabユーザではありません[リンク](https://unix.stackexchange.com/questions/ 52330/how-to-redirect-output-to-a-file-within-cron) –

0

私はこの問題に対する解決策を見つけました。私は、システムがcrontabによって実行されたときにifconfigという機能を認識できないと思います。サブプロセスにフルパスを追加すると、スクリプトが正しく実行されます。

`proc = subprocess.Popen('/sbin/ifconfig -a eth0',shell=True,stdout=subprocess.PIPE) 
proc.wait() 
output = proc.communicate()[0]` 

これで出力文字列を管理できます。

おかげ

関連する問題