鱼C论坛

 找回密码
 立即注册
查看: 2144|回复: 8

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

[复制链接]
发表于 2020-12-28 16:31:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我想在用python在cmd命令行完成下面操作,但是只能逐条下发命令,命令行回显了之后无法正确输入用户名和 搜狗截图20201228163121.png 密码。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-12-28 16:32:34 | 显示全部楼层
在线等,感觉职业生涯要走到尽头了。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-28 17:33:49 From FishC Mobile | 显示全部楼层
本帖最后由 hrp 于 2020-12-29 23:03 编辑

试试这个,手机写的,测试不了
  1. import re
  2. from subprocess import PIPE, Popen

  3. fake_file = Popen(['ftp', '10.40.92.3'], stdin=PIPE, stdout=PIPE, shell=True, universal_newlines=True)

  4. while fake_file.poll() is None:
  5.     info = fake_file.stdout.readline()
  6.     if re.search(r'用户.*', info):
  7.         # 用户名自行更改
  8.         fake_file.stdin.write('abc\n')
  9.     elif re.search(r'密码.*', info):
  10.         # 密码自行更改
  11.         fake_file.stdin.write('xxx\n')
  12.     elif re.search(r'ftp>.*', info):
  13.         fake_file.stdin.write('get 111.txt\n')
  14.         # 超时限制60秒
  15.         fake_file.communicate(timeout=60)

  16. print('退出状态码:', fake_file.returncode)
复制代码


如果不是非用subprocess不可的话,建议用pexpect库,这个是为命令行自动交互而生的。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-4 11:04:59 | 显示全部楼层
hrp 发表于 2020-12-28 17:33
试试这个,手机写的,测试不了

电脑返回的cmd是中文,re.search(r'用户.*', info)搜索的时候就不行,这个怎么处理?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-4 11:44:28 From FishC Mobile | 显示全部楼层
DC3339 发表于 2021-1-4 11:04
电脑返回的cmd是中文,re.search(r'用户.*', info)搜索的时候就不行,这个怎么处理?


是readline根本没读到“用户xxx”还是读取到了但是re没匹配到?
Screenshot_20210104_114019_com.hipipal.qpy3.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-5 10:15:17 | 显示全部楼层
hrp 发表于 2021-1-4 11:44
是readline根本没读到“用户xxx”还是读取到了但是re没匹配到?

控制台就啥也没输出,while fake_file.poll() is None:这个循环不知道有没有问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-5 10:25:24 From FishC Mobile | 显示全部楼层
本帖最后由 hrp 于 2021-1-5 10:27 编辑
DC3339 发表于 2021-1-5 10:15
控制台就啥也没输出,while fake_file.poll() is None:这个循环不知道有没有问题


当然没有输出,已经重定向到PIPE了,如果你想要输出可以print(info)。while poll应该没问题,我用过。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-5 16:34:42 From FishC Mobile | 显示全部楼层
DC3339 发表于 2021-1-5 15:15
这个样子也是没有输出的

while fake_file.poll() is None:

也许是访问缓慢导致ftp命令没有输出,或者其他原因
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 18:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表