English 中文(简体)
在Python中逐个执行命令?
原标题:
  • 时间:2008-12-11 13:30:23
  •  标签:

我想连续执行多个命令:

例如(只是为了阐明我的需求):

cmd(外壳)

那么

cd dir 的中文翻译为:进入指定目录。

and: 和

ls 的中文翻译是:列出目录中的文件和文件夹。

and: 和 read the result of the ls 的中文翻译是:列出目录中的文件和文件夹。.

有关subprocess模块的任何想法?

更新:

cd dir 的中文翻译为:进入指定目录。 and: 和 ls 的中文翻译是:列出目录中的文件和文件夹。 are just an example. I need to run complex command: 和s (following a particular order, without any pipelining). In fact, I would like one subprocess shell and: 和 the ability to launch many command: 和s on it.

最佳回答

有一种简单的方法来执行一系列指令。

请在subprocess.Popen中使用以下内容。

"command1; command2; command3"

或者,如果你困在Windows上,你有几个选择。

  • 创建一个临时的“.BAT”文件,并将其提供给subprocess.Popen

  • Create a sequence of commands with " " separators in a single long string.

使用"""s,就像这样。

"""
command1
command2
command3
"""

或者,如果你必须分步骤做事情,你必须要像这样做。

class Command( object ):
    def __init__( self, text ):
        self.text = text
    def execute( self ):
        self.proc= subprocess.Popen( ... self.text ... )
        self.proc.wait()

class CommandSequence( Command ):
    def __init__( self, *steps ):
        self.steps = steps
    def execute( self ):
        for s in self.steps:
            s.execute()

那将允许您构建一系列命令。 (Nà jiāng yǔnxǔ nín gòujiàn yī xìliè mìnglìng.)

问题回答

为此,你需要:

  • supply the shell=True argument in the subprocess.Popen call, and
  • separate the commands with:
    • ; if running under a *nix shell (bash, ash, sh, ksh, csh, tcsh, zsh etc)
    • & if running under the cmd.exe of Windows

在每个文件名中包含“foo”的文件中查找“bar”:

from subprocess import Popen, PIPE
find_process = Popen([ find ,  -iname ,  *foo* ], stdout=PIPE)
grep_process = Popen([ xargs ,  grep ,  bar ], stdin=find_process.stdout, stdout=PIPE)
out, err = grep_process.communicate()

out和err是包含标准输出和可能的错误输出的字符串对象。

是的,subprocess.Popen() 函数支持 cwd 关键字参数,你可以使用它来设置运行该进程的目录。

我猜第一步——Shell,如果你只是想运行ls,那么是没必要运行它通过Shell。

当然,你也可以将所需目录作为参数传递给ls

更新:值得注意的是,对于典型的Shell, cd 在Shell本身中实现,它不是在磁盘上的外部命令。这是因为它需要更改进程的当前目录,必须从进程内部完成。由于命令作为由Shell生成的子进程运行,所以它们无法做到这一点。





相关问题
热门标签