DC3339 发表于 2020-12-28 16:31:52

subprocess怎么在cmd回显了之后继续输入命令

我想在用python在cmd命令行完成下面操作,但是只能逐条下发命令,命令行回显了之后无法正确输入用户名和密码。

DC3339 发表于 2020-12-28 16:32:34

在线等,感觉职业生涯要走到尽头了。。。。。{:10_250:}

hrp 发表于 2020-12-28 17:33:49

本帖最后由 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库,这个是为命令行自动交互而生的。

DC3339 发表于 2021-1-4 11:04:59

hrp 发表于 2020-12-28 17:33
试试这个,手机写的,测试不了




电脑返回的cmd是中文,re.search(r'用户.*', info)搜索的时候就不行,这个怎么处理?

hrp 发表于 2021-1-4 11:44:28

DC3339 发表于 2021-1-4 11:04
电脑返回的cmd是中文,re.search(r'用户.*', info)搜索的时候就不行,这个怎么处理?

是readline根本没读到“用户xxx”还是读取到了但是re没匹配到?

DC3339 发表于 2021-1-5 10:15:17

hrp 发表于 2021-1-4 11:44
是readline根本没读到“用户xxx”还是读取到了但是re没匹配到?

控制台就啥也没输出,while fake_file.poll() is None:这个循环不知道有没有问题

hrp 发表于 2021-1-5 10:25:24

本帖最后由 hrp 于 2021-1-5 10:27 编辑

DC3339 发表于 2021-1-5 10:15
控制台就啥也没输出,while fake_file.poll() is None:这个循环不知道有没有问题

当然没有输出,已经重定向到PIPE了,如果你想要输出可以print(info)。while poll应该没问题,我用过。

DC3339 发表于 2021-1-5 15:15:45

hrp 发表于 2021-1-5 10:25
当然没有输出,已经重定向到PIPE了,如果你想要输出可以print(info)。while poll应该没问题,我用过。

这个样子也是没有输出的

while fake_file.poll() is None:
    info = fake_file.stdout.readline()
    print(info)

hrp 发表于 2021-1-5 16:34:42

DC3339 发表于 2021-1-5 15:15
这个样子也是没有输出的

while fake_file.poll() is None:


也许是访问缓慢导致ftp命令没有输出,或者其他原因{:10_250:}
页: [1]
查看完整版本: subprocess怎么在cmd回显了之后继续输入命令