命令行在不同文件夹中执行

时间:2012-12-06 13:18:57

标签: python shell command-line

我正在使用os.system(command)调用在python中调用命令行程序。

如何调用此命令传递另一个文件夹以执行?系统调用了吗?或者我应保存当前文件夹,并在执行后更改还原它。

3 个答案:

答案 0 :(得分:72)

subprocess模块是一个非常好的解决方案。

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

它还有修改环境变量,将输入/输出重定向到调用程序等的参数。

答案 1 :(得分:9)

在调用命令之前尝试os.chdir(path)

来自here

  

os.chdir(path)将当前工作目录更改为路径。

     

可用性:Unix,Windows

修改

这将改变当前的工作目录,你可以通过以下方式获得当前的工作:

os.getcwd()

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

编辑2

在任何情况下,您都应该按照建议doc移至subprocesshere)。如果您使用subprocess的{​​{1}},则可以选择提供Popen参数来指定子流程的工作目录:read this

cwd
  

...

     

如果cwd不是None,则子项的当前目录将更改为   cwd在执行之前。请注意,不考虑此目录   在搜索可执行文件时,您无法指定程序的路径   相对于cwd。

答案 2 :(得分:1)

在这里,我做了一个小功能来更改您正在处理的路径:

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)

该命令没有用,但是您明白了!