66

この呼び出しを使用して、Pythonでコマンドラインプログラムをos.system(command)呼び出しています。

このコマンドを呼び出して、実行用に別のフォルダーを渡すにはどうすればよいですか?これに対するシステムコールはありますか?または、現在のフォルダを保存し、実行後に変更して復元する必要があります。

4

3 に答える 3

104

このsubprocessモジュールは非常に優れたソリューションです。

import subprocess
p = subprocess.Popen([command, argument1,...], cwd=working_directory)
p.wait()

また、環境変数の変更、入力/出力の呼び出し元プログラムへのリダイレクトなどの引数もあります。

于 2012-12-06T13:35:03.437 に答える
23

os.chdir(path)コマンドを呼び出す前に試してください。

ここから:

os.chdir(path)現在の作業ディレクトリをpathに変更します。

可用性:Unix、Windows

編集

これにより、現在の作業ディレクトリが変更されます。次の方法で現在の作業ディレクトリを取得できます。

os.getcwd()

保存して後で復元する場合、元の作業ディレクトリで作業を行う必要がある場合。

編集2

いずれにせよ、ここで提案されているように、おそらくsubprocessdoc )に移動する必要があります。'sを使用する場合は、サブプロセスの作業ディレクトリを指定するパラメータを指定することができます。これを読んでくださいsubprocessPopencwd

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を基準にしたプログラムのパスを指定できないことに注意してください。

于 2012-12-06T13:22:31.473 に答える
3

ここで、作業中のパスを変更するための小さな関数を作成しました。

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、コマンドを作成できます。

command = ls
make_path('path_to_reach/')
os.system(command)

このコマンドは役に立ちませんが、あなたはその考えを理解しています!

于 2019-06-12T22:30:19.427 に答える