【问题标题】:Run a series of external commands in a Python script在 Python 脚本中运行一系列外部命令
【发布时间】:2018-02-09 07:40:12
【问题描述】:

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

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

所以当我使用subprocess 登录时,它会登录,但随后进程被终止,下次我使用subprocess 运行命令时,我不再登录了......我只需要运行一系列命令,就像我在终端中执行的那样。

知道怎么做吗?

【问题讨论】:

    标签: python subprocess


    【解决方案1】:

    您可以使用 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 中执行这些操作可能会使您的脚本更健壮、更简单、更连贯。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-31
      • 1970-01-01
      • 2014-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多