Pythonスクリプトでコマンドラインコマンドを実行するにはどうすればよいですか?

2つの別々のスクリプトScale1.pyScale2.py。それらを実行するには、ターミナルコマンドラインからsudo python Scale1.pyまたはsudo python Scale2.pyと入力します。

スクリプト。ボタンを押すと、プログラムが中断してScale1.pyを実行します。このようなものは機能しません。

 if GPIO.input(23) == False: break(sudo python Scale1.py)  

回答

os.system("sudo python scale1.py")

最初にosモジュールをインポートする必要があります

import os

テストするpiがありませんが、これはこの質問に対する2番目の回答から来ています: https://stackoverflow.com/questions/89228/calling-an-external-command-in-python

コメント

  • これは私が試したもので、うまくいきました。ハリーに感謝します。最初に両方のプログラムを組み合わせる必要がありました。これで、os.system(" sudo python Scale3.py ")が最初から再起動します。 Scale3.pyプログラムの問題です。インポートScale3.pyも機能すると思います。'サブプロセスを試しませんでしたが、見た目は面白く、おそらく学ぶ必要があります。 。
  • os.system()subprocessを優先して非難されました。 stackoverflow.com/a/4256153/4212158

回答

通常、 サブプロセス モジュール

subprocess.call(["sudo","python","scale1.py"]) 

コマンドライン呼び出しの場合。

サブプロセス呼び出しの結果を処理する例;

 result = subprocess.check_output(["sudo","service","mpd","restart"]) 

サブプロセスは、 os.system os.spawn 。引数のサニタイズに優れているため、シェルインジェクションから保護します。

https://docs.python.org/2/library/subprocess.html

もちろん、2番目のPythonスクリプトを実行するために、CLI呼び出しは必要ありません。それらをインポートできます。

コメント

  • I ' Pythonスクリプト内からコマンドを発行する方法を学習しようとしています(を参照)ここここ)で問題が発生しています。私の場合もsubprocessの方が良いのではないかと思います。

回答

harry sibが提案したようにsudoを使用できますが、最初のスクリプトを実行しているユーザーを sudoersファイルに追加する必要があります。

別のPythonスクリプトからPythonスクリプトを実行する最良の方法は、それをインポートすることです。 2番目のスクリプトのメソッドにスクリプトのロジックが含まれている必要があります:

 # Scale2.py def run(): do_first() do_second() [...] # Run it only if called from the command line if __name__ == "__main__": run() 
 # Scale1.py import Scale2 if (GPIO.input(23) == False): Scale2.run() 

コメント

  • + 1、pythonはこれに対応しているため、cleanestの回答になります。
  • +1 、これはOPが望んでいることを実行する正しい方法であり、おそらく受け入れられた答えであるはずです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です