subprocess怎么在cmd回显了之后继续输入命令
我想在用python在cmd命令行完成下面操作,但是只能逐条下发命令,命令行回显了之后无法正确输入用户名和密码。 在线等,感觉职业生涯要走到尽头了。。。。。{:10_250:} 本帖最后由 hrp 于 2020-12-29 23:03 编辑试试这个,手机写的,测试不了
import re
from subprocess import PIPE, Popen
fake_file = Popen(['ftp', '10.40.92.3'], stdin=PIPE, stdout=PIPE, shell=True, universal_newlines=True)
while fake_file.poll() is None:
info = fake_file.stdout.readline()
if re.search(r'用户.*', info):
# 用户名自行更改
fake_file.stdin.write('abc\n')
elif re.search(r'密码.*', info):
# 密码自行更改
fake_file.stdin.write('xxx\n')
elif re.search(r'ftp>.*', info):
fake_file.stdin.write('get 111.txt\n')
# 超时限制60秒
fake_file.communicate(timeout=60)
print('退出状态码:', fake_file.returncode)
如果不是非用subprocess不可的话,建议用pexpect库,这个是为命令行自动交互而生的。
hrp 发表于 2020-12-28 17:33
试试这个,手机写的,测试不了
电脑返回的cmd是中文,re.search(r'用户.*', info)搜索的时候就不行,这个怎么处理? DC3339 发表于 2021-1-4 11:04
电脑返回的cmd是中文,re.search(r'用户.*', info)搜索的时候就不行,这个怎么处理?
是readline根本没读到“用户xxx”还是读取到了但是re没匹配到? hrp 发表于 2021-1-4 11:44
是readline根本没读到“用户xxx”还是读取到了但是re没匹配到?
控制台就啥也没输出,while fake_file.poll() is None:这个循环不知道有没有问题 本帖最后由 hrp 于 2021-1-5 10:27 编辑
DC3339 发表于 2021-1-5 10:15
控制台就啥也没输出,while fake_file.poll() is None:这个循环不知道有没有问题
当然没有输出,已经重定向到PIPE了,如果你想要输出可以print(info)。while poll应该没问题,我用过。 hrp 发表于 2021-1-5 10:25
当然没有输出,已经重定向到PIPE了,如果你想要输出可以print(info)。while poll应该没问题,我用过。
这个样子也是没有输出的
while fake_file.poll() is None:
info = fake_file.stdout.readline()
print(info) DC3339 发表于 2021-1-5 15:15
这个样子也是没有输出的
while fake_file.poll() is None:
也许是访问缓慢导致ftp命令没有输出,或者其他原因{:10_250:}
页:
[1]