鱼C论坛

 找回密码
 立即注册
查看: 2478|回复: 14

[已解决]Python 交互式执行cmd命令

[复制链接]
发表于 2020-6-22 09:52:42 | 显示全部楼层 |阅读模式

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

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

x
如题,应该用什么库呢?我尝试了pexpect.popen_spawn,代码如下
  1. import pexpect
  2. from pexpect import popen_spawn

  3. child=pexpect.popen_spawn.PopenSpawn('python run.py')
  4. child.expect('Input something?')
复制代码


但效果是run.py的代码执行了,但是并没有打开控制台,报错:
pexpect.exceptions.TIMEOUT: <pexpect.popen_spawn.PopenSpawn object at 0x00000264737950B8>
searcher: searcher_re:
    0: re.compile(b'Input something?')
<pexpect.popen_spawn.PopenSpawn object at 0x00000264737950B8>
searcher: searcher_re:
    0: re.compile(b'Input something?')

有人做过类似的吗?这应该是个挺常见的需求。
最佳答案
2020-6-22 10:17:29
FC的注册很坑 发表于 2020-6-22 10:16
os.system和subprocess这两种方法我知道的,他们都是后台执行cmd命令的,主要问题不是怎么执行cmd命令, ...

我之前自己瞎写了一个,你看看行不
  1. import os
  2. import subprocess

  3. ml = ''
  4. os.chdir("C:\\Users")
  5. while ml != 'exit':
  6.     ml = input(os.getcwd() + '> ')
  7.     if 'cd' in ml:
  8.         try:
  9.             os.chdir(ml.split('cd ')[1])
  10.         except FileNotFoundError as reason:
  11.             print(reason)
  12.             continue
  13.         except:
  14.             resp = subprocess.Popen(ml + ' /?', shell = True,stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
  15.             print(resp[0].decode('gbk'), resp[1].decode('gbk'))
  16.     elif ml[:-1].isalpha() and len(ml) == 2 and ml[-1] == ':':
  17.         os.chdir(ml[:-1] + ':\\')
  18.     else:
  19.         resp = subprocess.Popen(ml, shell = True,stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
  20.         print(resp[0].decode('gbk'), resp[1].decode('gbk'))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-6-22 10:01:03 | 显示全部楼层
这应该是个非常不常见的需求。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-22 10:03:53 | 显示全部楼层
wp231957 发表于 2020-6-22 10:01
这应该是个非常不常见的需求。

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-22 10:08:37 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-22 10:16:12 | 显示全部楼层
Twilight6 发表于 2020-6-22 10:08
看看呗,点击蓝字:

python执行cmd命令的几种方法

os.system和subprocess这两种方法我知道的,他们都是后台执行cmd命令的,主要问题不是怎么执行cmd命令,是需要做交互啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-22 10:17:29 | 显示全部楼层    本楼为最佳答案   
FC的注册很坑 发表于 2020-6-22 10:16
os.system和subprocess这两种方法我知道的,他们都是后台执行cmd命令的,主要问题不是怎么执行cmd命令, ...

我之前自己瞎写了一个,你看看行不
  1. import os
  2. import subprocess

  3. ml = ''
  4. os.chdir("C:\\Users")
  5. while ml != 'exit':
  6.     ml = input(os.getcwd() + '> ')
  7.     if 'cd' in ml:
  8.         try:
  9.             os.chdir(ml.split('cd ')[1])
  10.         except FileNotFoundError as reason:
  11.             print(reason)
  12.             continue
  13.         except:
  14.             resp = subprocess.Popen(ml + ' /?', shell = True,stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
  15.             print(resp[0].decode('gbk'), resp[1].decode('gbk'))
  16.     elif ml[:-1].isalpha() and len(ml) == 2 and ml[-1] == ':':
  17.         os.chdir(ml[:-1] + ':\\')
  18.     else:
  19.         resp = subprocess.Popen(ml, shell = True,stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
  20.         print(resp[0].decode('gbk'), resp[1].decode('gbk'))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-22 10:21:59 | 显示全部楼层
FC的注册很坑 发表于 2020-6-22 10:16
os.system和subprocess这两种方法我知道的,他们都是后台执行cmd命令的,主要问题不是怎么执行cmd命令, ...

那我就不知了哈哈,楼上大佬,看看他的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-22 10:26:57 | 显示全部楼层
qiuyouzhi 发表于 2020-6-22 10:17
我之前自己瞎写了一个,你看看行不

,果然我是个轮子都用不好的小白,还需要一个sendcontrol的功能,例如ctrl+C打断运行。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-22 10:29:07 | 显示全部楼层
qiuyouzhi 发表于 2020-6-22 10:17
我之前自己瞎写了一个,你看看行不

感觉应该再加个else,检索键盘动作(或者是输入,还没想好,还得试一试),然后执行kill就能实现了吧?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-22 10:33:28 | 显示全部楼层
Twilight6 发表于 2020-6-22 10:21
那我就不知了哈哈,楼上大佬,看看他的

活捉大佬,本小白瑟瑟发抖,基础真的太差了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-22 10:34:58 | 显示全部楼层
FC的注册很坑 发表于 2020-6-22 10:26
,果然我是个轮子都用不好的小白,还需要一个sendcontrol的功能,例如ctrl+C打断运 ...

那或许需要多线程?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-22 10:42:43 | 显示全部楼层
qiuyouzhi 发表于 2020-6-22 10:34
那或许需要多线程?

试了下应该是的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-22 10:44:20 | 显示全部楼层

我刚才看了下,貌似并不需要,就是反应速度有点慢
  1. import os
  2. import subprocess

  3. ml = ''
  4. os.chdir("C:\\Users")
  5. while ml != 'exit':
  6.     ml = input(os.getcwd() + '> ')
  7.     if 'cd' in ml:
  8.         try:
  9.             os.chdir(ml.split('cd ')[1])
  10.         except FileNotFoundError as reason:
  11.             print(reason)
  12.             continue
  13.         except:
  14.             resp = subprocess.Popen(ml + ' /?', shell = True,stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
  15.             print(resp[0].decode('gbk'), resp[1].decode('gbk'))
  16.     elif ml[:-1].isalpha() and len(ml) == 2 and ml[-1] == ':':
  17.         os.chdir(ml[:-1] + ':\\')
  18.     else:
  19.         try:
  20.             resp = subprocess.Popen(ml, shell = True,stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
  21.         except KeyboardInterrupt:
  22.             continue
  23.         print(resp[0].decode('gbk'), resp[1].decode('gbk'))
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-22 10:54:47 | 显示全部楼层
qiuyouzhi 发表于 2020-6-22 10:44
我刚才看了下,貌似并不需要,就是反应速度有点慢

好像不行的吧,我写了个while True的死循环脚本,输入命令“Python XX.py”运行这个脚本
会卡在resp = subprocess.Popen(ml, shell = True,stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()这步的,执行不到下一个while ml != 'exit':循环
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-22 11:04:24 | 显示全部楼层
FC的注册很坑 发表于 2020-6-22 10:54
好像不行的吧,我写了个while True的死循环脚本,输入命令“Python XX.py”运行这个脚本
会卡在resp = s ...

那就得用多线程了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-22 08:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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