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) 将当前工作目录更改为路径。

可用性:Unix、Windows

编辑

这将更改当前工作目录,您可以通过以下方式获取当前工作目录:

os.getcwd()

如果您想保存它并稍后恢复它,如果您需要在原始工作目录中做一些工作。

编辑 2

在任何情况下,您都应该按照此处的建议移至subprocess( doc ) 。如果您使用'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 回答