os.system(command)
呼び出しを使用して、python)でコマンドラインプログラムを呼び出しています。
別のフォルダーを渡して実行するこのコマンドを呼び出すにはどうすればよいですか?これにはシステムコールがありますか?または、現在のフォルダーを保存し、実行後に変更して復元する必要があります。
subprocess
モジュールは非常に優れたソリューションです。
import subprocess
p = subprocess.Popen([command, argument1,...], cwd=working_directory)
p.wait()
また、環境変数の変更、呼び出しプログラムへの入出力のリダイレクトなどの引数もあります。
コマンドを呼び出す前にos.chdir(path)
を試してください。
ここ から:
os.chdir(path)現在の作業ディレクトリをパスに変更します。
可用性:Unix、Windows
[〜#〜] edit [〜#〜]
これにより、現在の作業ディレクトリが変更されます。現在の作業ディレクトリは次の方法で取得できます。
os.getcwd()
元の作業ディレクトリで作業を行う必要がある場合に、保存して後で復元する場合。
EDIT 2
いずれにせよ、おそらく here のようにsubprocess
( doc )に移動する必要があります。 subprocess
のPopen
を使用する場合、cwd
パラメーターを指定して、サブプロセスの作業ディレクトリを指定できます: read this 。
subprocess.Popen(args, bufsize=0, executable=None, stdin=None,
stdout=None, stderr=None, preexec_fn=None, close_fds=False,
Shell=False, cwd=None, env=None, universal_newlines=False,
startupinfo=None, creationflags=0)
...
CwdがNoneでない場合、子の現在のディレクトリは実行前にcwdに変更されます。このディレクトリは実行可能ファイルの検索時に考慮されないため、cwdに対するプログラムのパスを指定できないことに注意してください。
ここでは、作業中のパスを変更する小さな関数を作成しました。
_import os
def make_path(r_path):
ack = 1
try:
root = os.path.dirname(__file__)
rel_path = os.path.join("..", r_path)
abs_path = os.path.join(root, rel_path)
os.chdir(abs_path)
ack = 0
except Exception as details:
print('problem to get to the path '+r_path+' (0001) : ' + str(details))
return ack
_
したがって、ここで_r_path
_は、行きたい相対パスです。 _".."
_をpath.join()
メソッドに追加したので、フォルダー内にいて、パスを検索する前にフォルダーを終了する場合、自動的に実行されます。したがって、相対ディレクトリが次のようになっている場合:
_-path_to_reach
-a_random_file.txt
-your_current_folder
-your_program.py
_
これらの行を実行して_path_to_reach
_内に移動し、exempleでコマンドを作成できます。
_command = ls
make_path('path_to_reach/')
os.system(command)
_
このコマンドは有用ではありませんが、アイデアはわかります!