柒月⑩肆 2023-09-21 16:31 采纳率: 40%
浏览 4

subprocess传递参数和组合键

使用python的subprocess模块,需要传递参数(数字3,然后按Enter键)后按Ctrl+D结束,
命令如下:
cmd = "xxx"
p = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
p.communicate("3\n".encode())
p.stdin.write("EOF".encode())
p.stdin.close()
报错:
ValueError: write to closed file

img

如果直接将Ctrl+D在communicate中传递的话,不能运行,报错是CTRL+D乱码,识别不了
p.communicate("3\n\x04".encode())
报错如下:

img

该如何处理再传递参数后,再传递组合键的问题,谢谢。

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-21 19:44
    关注

    【以下回答由 GPT 生成】

    解决方案

    问题是需要使用Python的subprocess模块传递参数和按下组合键来执行命令。可以使用pexpect模块来实现这个功能。

    以下是使用pexpect模块的解决方案:

    1. 首先,确保已安装pexpect模块。可以使用以下命令安装:

      pip install pexpect

    2. 然后,在代码中导入pexpect模块:

      python import pexpect

    3. 创建一个pexpect.spawn对象,传入需要执行的命令:

      python child = pexpect.spawn('xxx')

    4. 使用expect方法来等待特定的字符串,然后发送相应的输入:

      python child.expect('Input:') # 等待输入提示符 child.sendline('3') # 发送参数数字3

    5. 使用sendcontrol方法发送组合键,例如Ctrl+D:

      python child.sendcontrol('d') # 发送Ctrl+D组合键

    6. 最后,等待命令执行完成并获取输出:

      python child.expect(pexpect.EOF) # 等待命令完成 output = child.before.decode() # 获取输出

    完整的代码如下所示:

    import pexpect
    
    child = pexpect.spawn('xxx')  # 创建pexpect.spawn对象
    
    child.expect('Input:')  # 等待输入提示符
    child.sendline('3')  # 发送参数数字3
    
    child.sendcontrol('d')  # 发送Ctrl+D组合键
    
    child.expect(pexpect.EOF)  # 等待命令完成
    output = child.before.decode()  # 获取输出
    
    print(output)  # 打印输出
    

    这样,就可以使用pexpect模块传递参数和按下组合键来执行命令了。请注意替换代码中的xxx为实际需要执行的命令。如果还有其他问题,请随时提问。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 9月21日

悬赏问题

  • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
  • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
  • ¥15 Android studio 无法定位adb是什么问题?
  • ¥15 C#连接不上服务器,
  • ¥15 angular项目错误