2017-04-09 7 views
0

私はPythonプログラムを実行するシェルスクリプトを書いた。次に、xdotoolを使用してプログラムにファイルをロードします。私はシェルスクリプトでプログラムを実行します。ロードされているかどうかはどのように分かりますか? (Linux)

#!/bin/bash 
cd ~/Folder 
python program.py & 
sleep 10 
WID=$(xdotool search --onlyvisible program) 
.... 

私は本当にプログラムがロードされるように、わずか10秒を待っているの私の解決策を好きではありません。今のところ、これは私のコードです。より良い方法がありますか?

+0

Pythonプログラムでスクリプトの2番目の部分を開始しましたか? – kindall

+0

私はPythonプログラムを書いていませんでした。そのオープンソースソフトウェア – MilloMille

+0

'xdotool search'は' --sync'オプションを持っています。これはウィンドウが見えるのを待つでしょう。そのオプション(つまり、 'xdotool search --sync --onvisible program')を指定して実行すると、スクリプトはまったくスリープする必要はありません。 – ottomeister

答えて

0

これは本当に依存します。 program.pyが完了したら、xdotoolに進み、&の代わりに&&を使用します。単一の&は、コマンドの実行を待ってから、できるだけ早く次のコマンドに移動することを意味します。 dobule &&は、実行が完了するのを待つことを意味し、エラー終了がゼロの場合にのみ続行します。 program.pyの成功に関係なく、次のコマンドを実行する場合は、&を削除するか、;を使用することもできます。右&を使用して、あなたがxdotoolのコマンドを実行しながら実行し続けるはず、しかし、あなたは続行する前に、いくつかの準備状態に来てprogram.pyを必要としている

#!/bin/bash 
cd ~/Folder 
python program.py && 
WID=$(xdotool search --onlyvisible program) 
... 

program.py場合は、あなたがしている:ここで私ができんですよあなたは何とかprogram.pyを監視し、そこから信号を受け取って続行する必要があります。これを行う古くは、program.pyがファイルを作成/タッチ/編集するようにして、そのファイルが検出されたら続行します。より高度な方法は、ネットワークソケットなどを使用することですが、実際に何もする必要がなければ、私はそれに対してアドバイスをします。この最後の解決策program.pyxdotool

#!/bin/bash 
cd ~/Folder 
python program.py & 
until [ -f /tmp/.program_signal_file ] 
do 
    sleep 1 
done 
WID=$(xdotool search --onlyvisible program) 
rm /tmp/.program_signal_file 
... 

は、両方同時に実行されている:とにかく、あなたが作る場合program.pyは、物事は準備ができているとき、あなたがしなければならないすべては、/tmp/.program_signalfileを言って、信号のファイルを作成します。それがあなたが探していたものなら。

+0

あなたが言ったことは本当に役に立ちました。私はxdotoolコマンドを実行している間、プログラムを実行する必要があります。しかし、私はどのようにプログラムをファイルにするのですか?それは私が書いていないオープンソースのソフトウェアです。 – MilloMille

+0

ソースコードにapp.MainLoop()という行があります。その前にファイルを作成していますか?しかし、私はどのようにファイルを作成するのですか?申し訳ありません、私はまだこれにかなり新しいです – MilloMille

関連する問題