我们可以在python启动的同一命令提示符中执行多个命令

时间:2011-12-06 10:42:33

标签: python

有一个excel文件,其中包含多个方案的路径。我在for循环中使用os.system(command)。在每次迭代中,从excel文件中读取路径并执行该路径的方案。

我的问题是,每次使用os.system(),CMD打开,执行一个命令并关闭。在下一次迭代中,再次读取第二条路径并执行它并关闭CMD。这里CMD一次又一次弹出。在此期间系统正忙,无法完成其他任务。我想在一个CMD中执行所有命令(场景),因为我想最小化它并将系统用于其他任务。

在每次迭代中,有两个主要步骤:

  1. os.chdir(PATH)
  2. os.system(path of exe+" "+name of config file that is present at PATH")
  3. 可以通过使用子进程来完成。如果是,请举例说明如何实施?

3 个答案:

答案 0 :(得分:2)

如果您想使用subprocess模块,请尝试以下方法:

from subprocess import call
import os.path

def call_scenario(path, config_file):
    retcode = call(["path/of/exe", os.path.join(path,config_file)])
    if retcode != 0:
       print "Something bad happened : %s"%retcode 

使用subprocess.call时,shell=False参数将避免启动cmd来执行某些操作。

答案 1 :(得分:0)

可以这样做 - 这是一个使用多处理(Python 2.6或更新版本)的快速示例

下面的示例使用Unix命令(“ls”)和unixes路径(“/ usr等...”),但只需用您需要的命令和路径替换它们。

from multiprocessing import Process
import os

paths = ["/tmp", "/usr", "/usr/include"]


def exec_(path):
    p = Process()
    p.run = lambda: os.system("ls %s" % path)
    p.start()

for path in paths:
    exec_(path)

另一种选择,如果你需要对正在运行的东西,返回代码等进行一些复杂的控制......就是利用Fabric项目 - 虽然它的目的是使用ssh在不同的主机上执行多个命令 - 我认为它可以用于同一主机上的不同路径。

面料的网址:
http://docs.fabfile.org/en/1.3.3/index.html

答案 2 :(得分:0)

同时为每个c:\path\to\exe 的所有config.ini运行path 并在执行前将当前目录更改为cwd

from subprocess import Popen

processes = [Popen([r"c:\path\to\exe", "config.ini"], cwd=path) for path in paths]
for p in processes: p.wait()

如果您不想并行运行所有命令,请使用subprocess.call()subprocess.Popen()相同的参数。