要运行的命令
['ssh', 'tara@ds0', 'sudo', 'cat', '/etc/shadow', '|', 'awk', '-F":"', "'{print $1}'", '|', 'uniq']
<><><><><>
Successfuly fetched from ds0 /etc/shadow
['sudo', 'cat', '/etc/shadow', '|', 'awk', '-F":"', "'{print $1}'", '|', 'uniq']
<><><><><>
cat: invalid option -- 'F'
正如您在上面所看到的,我保持命令在列表中运行,该列表由python subprocess 模块运行 这里的问题是 ssh 的第一个命令工作正常,但在 localhost 中运行命令抛出无效选项-F错误
我使用-F过滤结果以从结果中删除密码。
我已经测试了手动运行sudo cat /etc/shadow | awk -F':' '{print $1}' | uniq
的代码并且它正在运行并给我预期的结果
为什么我收到错误:cat invalid option - 'F'。哪里可能有问题。为什么子进程无法处理它。
答案 0 :(得分:1)
子进程将视为|或-F是猫参数。猫没有这个参数。如果你有列表并希望像这样使用子进程。
p = ['sudo', 'cat', '/etc/shadow', '|', 'awk', '-F":"', "'{print $1}'", '|', 'uniq']
output = subprocess.check_output(' '.join(p),shell=True)
print output # you will get expected output
OR .......如果你想给字符串
p = 'sudo cat /etc/shadow | awk -F: '{print $1}' | uniq'
output = subprocess.check_output(' '.join(p),shell=True)
print output # you will get expected output
答案 1 :(得分:0)
.tabs('option', 'collapsible', false)
是一个管道运算符,由shell解释。要解释它,您需要告诉子进程您的命令将在shell中运行 - 您可以通过添加关键字参数|
来执行此操作。如果没有这个,你将执行带有几个参数的cat命令,其中包括shell=True
和|
。并且-F":"
不是cat的有效选项(如错误消息所示)。