在Python脚本中运行一系列外部命令

时间:2018-02-09 07:40:12

标签: python subprocess

我试图从Python脚本运行外部命令(注意复数)。我一直在阅读subprocess模块并使用它。当我有单个或独立的命令运行时,它对我有用,无论我是否对stdout感兴趣。

我想要做的是有点不同:我想要持久的东西。基本上我运行的第一个命令是登录一个应用程序,然后我可以运行一些其他命令,这些命令只有在我登录时才有效。对于其中一些命令,我​​需要stdout。

因此,当我使用subprocess登录时,它会执行此操作,但随后该进程被终止,并且下次我使用subprocess运行命令时,我还没有登录...我只需要运行一系列命令,比如我会在终端中执行它。

知道怎么做吗?

1 个答案:

答案 0 :(得分:0)

你可以使用shell=True传递任意复杂的一系列命令,尽管我会generally advise against doing that,如果不是因为你使你的Python脚本平台依赖。

result = subprocess.check_output('''
    servers=0
    for server in one two three four; do
        output=$(printf 'echo moo\necho bar\necho baz\n' | ssh "$server")
        case $output in *"hello"*) echo "$output";; esac
        echo "$output" | grep -q 'ALERT' && echo "$server: Intrusion detected"
        servers=$((servers++))
    done
    echo "$servers hosts checked"
    ''', shell=True)

shell脚本的一个问题(或者我猜Powershell或cmd批处理脚本如果你处于那种非常不幸的困境中)就是做一些模糊描述的东西通常很难用一堆未连接的流程。例如。 curl有一种粗略的方法来维持单独调用之间的会话,方法是保留一个“cookie jar”,允许一个curl将登录凭据等传递给以后独立的curl调用,但是没有好的,优雅的,一般的机制。如果可能的话,从Python中做这些事情可能会使你的脚本更加健壮,更简单,更连贯。