我试图从Python脚本运行外部命令(注意复数)。我一直在阅读subprocess
模块并使用它。当我有单个或独立的命令运行时,它对我有用,无论我是否对stdout感兴趣。
我想要做的是有点不同:我想要持久的东西。基本上我运行的第一个命令是登录一个应用程序,然后我可以运行一些其他命令,这些命令只有在我登录时才有效。对于其中一些命令,我需要stdout。
因此,当我使用subprocess
登录时,它会执行此操作,但随后该进程被终止,并且下次我使用subprocess
运行命令时,我还没有登录...我只需要运行一系列命令,比如我会在终端中执行它。
知道怎么做吗?
答案 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中做这些事情可能会使你的脚本更加健壮,更简单,更连贯。