我想从Python2.7运行这个bash命令:
time ( s=172.20.16 ; for i in $(seq 1 254) ; do ( ping -n -c 1 -w 1 $s.$i 1>/dev/null 2>&1 && printf "%-16s %s\n" $s.$i responded ) & done ; wait ; echo )
我试着这样运行:
cmd = 'time ( s=172.20.16 ; for i in $(seq 1 254) ; do ( ping -n -c 1 -w 1 $s.$i 1>/dev/null 2>&1 && printf "%-16s %s\n" $s.$i responded ) & done ; wait ; echo )'
#1. subprocess.call(cmd.split())
#2. subprocess.call(cmd, shell=True)
#3. os.system(cmd)
但是所有返回的/bin/sh:1:语法错误:word unexpected(expected“)”,在从bash
运行它时工作得很好。我还尝试在命令头中添加/bin/bash
,但没有成功。你知道吗
当使用os.system('bash "{}"'.format(cmd))
时,它没有因为前面的错误而崩溃,但是循环未正确展开(它打印了1..254,而不是将它们用作IP后缀)
我将命令保存在bash脚本中,然后从python调用该脚本,从而使它能够工作,但我更愿意直接这样做。这里有什么问题?你知道吗
您正在按空格拆分以构造suprocess call方法的命令/参数数组;但是请注意,有些参数包含空格,因此它应该算作单个参数,而不是两个参数(即此参数:
"%-16s %s\n"
)shell=True
使用/bin/sh
。/bin/sh
不是bash
。你知道吗保留shell脚本的所有问题,但使用bash调用它,将如下所示:
将其重写为一个更好的shell脚本可能看起来像:
注意,我们使用的是
{ ...; }
,而不是( ... )
进行分组(这样就避免了更多的子shell创建),而且我们总是引用替换。你知道吗请尝试按此链接使用子进程Running Bash commands in Python
相关问题 更多 >
编程相关推荐