Piping bash commands using Python subprocess.call - Syntax error: "|" unexpected
Piping bash commands using Python subprocess.call - Syntax error: "|" unexpected
我在使用 subprocess.call 测试管道时遇到了以下问题。
例如,使用用户作为字符串和文本文件的自动 ssh。
该管道使用字符串(示例 1)完美运行,但在打开文本文件以检查用户时失败(示例 2)。
从文件中传递值时是否有限制?
示例 1:
$ python3 script.py 我的主机
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)
输出:
测试1
正在尝试'test1'...
已登录
测试2
正在尝试'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, host)],
shell=True, stdout=None, stderr=None)
cnt += 1
输出:
测试1
/bin/sh:2:语法错误:“|”意外
测试2
/bin/sh:2:语法错误:“|”意外
以防万一有人遇到这个问题,我最终通过删除第一个 readline、添加一个 strip 并修改 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
我在使用 subprocess.call 测试管道时遇到了以下问题。 例如,使用用户作为字符串和文本文件的自动 ssh。 该管道使用字符串(示例 1)完美运行,但在打开文本文件以检查用户时失败(示例 2)。 从文件中传递值时是否有限制?
示例 1: $ python3 script.py 我的主机
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)
输出:
测试1
正在尝试'test1'...
已登录
测试2
正在尝试'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, host)],
shell=True, stdout=None, stderr=None)
cnt += 1
输出:
测试1
/bin/sh:2:语法错误:“|”意外
测试2
/bin/sh:2:语法错误:“|”意外
以防万一有人遇到这个问题,我最终通过删除第一个 readline、添加一个 strip 并修改 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