如何解决使用Python subprocess.call管道bash命令-语法错误:“ |”意外
我正在使用subprocess.call测试管道,然后遇到以下问题。 例如,使用用户作为字符串和文本文件的自动ssh。 该管道可以完美地使用字符串(示例1)运行,但是在打开文本文件以检查用户时(示例2)失败。 从文件中传递值时有限制吗?
示例1: $ python3 script.py myhost
import subprocess
import sys
host = sys.argv[1]
for j in range(0,2):
words = ['test1','test2']
user = words[j]
print(user)
print('Loggin in %s...' % repr(user))
subp = subprocess.call(['echo %s | ssh %s' % (user,host)],shell=True,stdout=None,stderr=None)
输出:
test1
尝试“ test1” ...
已登录
test2
尝试“ test2” ...
已登录
示例2: $ python3 script.py myhost users.txt
import subprocess
import sys
host = sys.argv[1]
user_list = sys.argv[2]
with open(user_list) as usr:
user = usr.readline()
cnt = 0
while user:
print(user.strip())
user = usr.readline()
subp = subprocess.call(['echo %s | ssh %s' % (user,stderr=None)
cnt += 1
输出:
test1
/ bin / sh:2:语法错误:“ |”意外
test2
/ bin / sh:2:语法错误:“ |”意外
解决方法
万一有人偶然发现,我最终摆脱了第一条阅读线,添加了一条代码条并修改了while条件,从而解决了问题:
with open(user_list) as usr:
cnt = 0
while usr:
line = usr.readline()
user = line.strip()
subp = subprocess.call(['echo %s | ssh %s' % (user,host)],shell=True,stdout=None,stderr=None)
cnt += 1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。