私は職場で使用される一連のスクリプトを自動化することで問題を解決しようとしています。私は初心者ですので、簡単な質問(うまくいけば)である可能性があることをお詫びしますが、私は文献を読んでいますが、それは私にはあまり意味がありません。os.wait()を適切に使用していますか?
本質的に私はpythonスクリプトとRスクリプトを実行するbashスクリプトを持っています。これは、現在実行されているコードがRスクリプトであり、Pythonが終了する前に開始しています。私のpythonスクリプトとしてのシェル待機関数は子プロセスを起動し、シェル待機は孫プロセスの待機に使用できません。
これは素晴らしいので、PythonとRスクリプトを自分の子プロセスで待機させ、終了時にbashスクリプトを適切に実行できるようにしました。残念ながら私はPythonスクリプトでこれの適切な命名法を理解することはできません。
は、ここで私が持っているものです。
「入力」は私たちが基本的に私が把握しようとしています:)をやっているまさに私のコード、私はおそらくちょうどカントシェアの実際の入力である
cmd = "python %s/create_keyfile.py %s %s %s %s" %(input, input, input,
input, input)
print cmd
os.system(cmd)
cmd = "python %s/uneak_name_plus_barcode_v2.py %s %s %s %s" %(input,
input, input, input, input)
print cmd
os.system(cmd)
cmd = "python %s/run_production_mode.py %s %s %s %s %s" %(input, input,
input, input, input, input)
print cmd
os.system(cmd)
終了する前に、スクリプト全体をこれら3つのスクリプトで待つ最良の方法を出してください。
EDIT:これを助けてくれてありがとう、ここで私はこのことを探しているGoogleのジレンマを引き起こしました。私はtime import sleepから "python -c"を挿入することを決めました。最初の2つのPythonスクリプトが期待どおりに待っていたことを、スリープ(30) ""私のコードに書き留めました。その末尾に "&"があり、それを待つコマンドは無視されていました。これを単に削除すると、すべてのコードが順番に実行されました。&
os.system()はすでにブロッキング呼び出しです。つまり、完了するまで既に戻りません。あなたのpythonスクリプトがデーモン化しない限り、親は子プロセスを終了する前に子プロセスをブロックする必要があります。彼らがデーモン化するなら、あなたはpsかtopでプロセスをチェックする必要があります。私は問題が実際にはおそらくバックグラウンドでスクリプトを実行しているBASHスクリプトにあると推測します。 python -c "from time import sleep; sleep(30)" bashスクリプトの実行に90秒かかることがあります。 – sehafoc
BTW、 'shell = True'が危険な理由については、https://docs.python.org/2/library/subprocess.html#frequently-used-argumentsの警告を参照してください。これは**すべての**メソッドに当てはまります'os.system()'が同じ危険に晒されていることを意味します(同じ理由で使用すべきではありません)。 –
...具体的には、あなたの 'input'の中に' $(rm -rf〜) 'が含まれているとしましょう - あなたがシェルによって実行されることは望ましくありませんが、あなたの '%s'プレースホルダの代わりに使用されます。 –