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


16

2つの個別のスクリプトを使用Scale1.pyしていScale2.pyます。それらを実行するには、ターミナルコマンドラインから入力するsudo python Scale1.pysudo python Scale2.py、ターミナルコマンドラインから実行します。Scale2.pyボタンを押すと、プログラムが中断して実行される行をスクリプトに入れたいと思いますScale1.py。機能しないこのようなもの。

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

回答:


24

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

まず、osモジュールをインポートする必要があります

import os

私はテストするためのATMを持っていませんが、これはこの質問に対する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
crypdick

11

一般に、サブプロセスモジュールを使用します

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

コマンドライン呼び出し用。

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

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

サブプロセスは、os.systemos.spawnなどのいくつかの古いモジュールと機能を置き換えます。引数をサニタイズするのに良い仕事をするので、シェルインジェクションからあなたを守ります。

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

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


Pythonスクリプト内からコマンドを発行する方法を学習しようとしています(こちらこちらをご覧ください)。いくつか問題があります。私の場合にsubprocessも良いかもしれないのだろうか。
うーん

6

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

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

#Scale2.py
def run():
    do_first()
    do_second()
    [...]

#コマンドラインから呼び出された場合のみ実行する
__name__ == '__main__'の場合:
    run()
#Scale1.py
Scale2をインポートする

if(GPIO.input(23)== False):
    Scale2.run()

2
+ 1、pythonはこれが可能であるため、cleanest答えになります。
LuWi

1
+1、これはOPが望むことをする正しい方法であり、おそらく受け入れられた答えであるべきです。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.