2016-11-23 18 views
0

私はシリアルポートを読んで、データをPythonに送信します。このチェーンが10秒間動作するようにします。以下のコードは動作しません:スクリプトの実行時間[編集]

sudo cat -v /dev/pts/2 | python3 bash_test.py 
pid=$! 
sleep 10 
kill -9 $pid 

[UPDATE] 例えばbash_test.py

import sys 
for line in sys.stdin: 
    print(line,'\n') 
+0

catを終了するには、eofシグナルが必要です。コードは最初の行でcatコマンドをブロックしており、スリープコマンドには到達しません。 – DeRauk

+0

私はそれをどのように解決できますか? – weider

答えて

1

あなたはtimeoutを使用することができます。

sudo bash -c "cat -v /dev/pts/2 | timeout 10 python3 bash_test.py" 

コマンド情報:

NAME 
     timeout - run a command with a time limit 

SYNOPSIS 
     timeout [OPTION] DURATION COMMAND [ARG]... 
     timeout [OPTION] 

timeoutのための簡単な例:

timeout 3 sleep 10 

コマンドここでは0123ですしかし、timeoutは3秒後にそれを殺します。

+0

素晴らしい作品です! – weider

+0

@weider彼が提案した解決策があなたの問題を解決したので、この回答に印を付けるべきです! –

0

あなたのsudoの後

sudo cat -v /dev/pts/2 | python3 bash_test.py & 
pid=$! 
sleep 10 
kill -9 $pid 
0

を&記号を追加してみてください、次のコードをオープン「サブ実際のコマンドが実行されている「-bash」環境で実行されます。このようにして、バックグラウンドで実行できます。 Pythonスクリプトでスレッドやマルチプロセッシングを使用している場合、問題が発生することがあります。

(sudo cat -v /dev/pts/2 | python3 bash_test.py) & 
pid=$! 
sleep 10 
kill -9 $pid 
+0

アップデートをご覧ください。 – weider

関連する問題