首页 > 系统相关 >python3 subprocess.getoutput(cmd) 执行linux命令进入交互模式后一直卡住了

python3 subprocess.getoutput(cmd) 执行linux命令进入交互模式后一直卡住了

时间:2023-06-19 19:11:45浏览次数:42  
标签:cmd subprocess getoutput timeout error print output

进入交互模式是我们预期之外的,记录一下。
进入交互之后linux一直等待你的输入,所有subprocess.getoutput()就一直卡着呢~,我们加入timeout
通过学习subprocess中支持timeout有:
image
getoutput并不支持timeout参数
image
尝试了call check_all check_output 这几个方法之后并不能解决Linux 交互超时问题。

chatgpt的答案:

import subprocess
try:
    cmd = 'sleep 11'

    process = subprocess.Popen(cmd, shell=True,stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    output, error = process.communicate(timeout=10)
    # 执行成功
    print(output)
except subprocess.TimeoutExpired:
    # 超时事例
    process.kill()  # 终止子进程

直接获取到子进程,超时后直接kill掉
升级版:

def exe_cmd(cmd,timeout=15):
    code = 0
    res = None
    try:
        process = subprocess.Popen(cmd, shell=True,stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        output, error = process.communicate(timeout=timeout)
        output = output.decode()
        error = error.decode()
        if output:
            print('命令 %s执行成功' % cmd)
            print(output)
            code = 0
            res = output

        if error:
            print('命令 %s执行失败' % cmd)
            print(error)
            code = 0
            res = output
        if not output and not error:
            print('命令执行没有结果')
            res = None

    except BaseException as e:
        # 超时事例
        print(e)
        print('执行命令超时')
        res = e
        code = '1'
        process.kill()  # 终止子进程
    finally:
        return code, res

标签:cmd,subprocess,getoutput,timeout,error,print,output
From: https://www.cnblogs.com/tarzen213/p/17491964.html

相关文章

  • You can now run VMware Tools by invoking "/usr/bin/vmware-toolbox-cmd"
    Thefastnetworkdevicedriver(vmxnetmodule)isusedonlyforourfast networkinginterface.TherestofthesoftwareprovidedbyVMwareToolsis designedtoworkindependentlyofthisfeature.Ifyouwishtohavethefastnetworkdriverenabled,you......
  • cmd输入任何npm命令空白无反应
    输入node命令没有问题,输入npm命令就空白原因:使用了其他命令(例如:npmconfigsetprefix)使npm的config乱掉了,删掉.npmrc文件就可以了这里要注意,不是nodejs安装目录npm模块下的那个npmrc文件而是在C:\Users\用户\下的.npmrc文件......
  • QA|Pycharm:allure : 无法将“allure”项识别为 cmdlet、函数、脚本文件或可运行程序的
    Pycharm中生成allure测试报告时报错如图: 单独执行allure--version也不行,cmd这样执行也报同样的错 网上查了说是环境变量问题,加一下cmd可以了,重启pycharm也可以了    参考文章:(118条消息)pycharmallure:无法将“allure”项识别为cmdlet、函数、脚本文件......
  • Python基础之subprocess模块、hashlib模块、日志模块
    subprocess模块tasklist:列举出来文件进程命令"""1.以后我们可以用自己的电脑连接上别人的电脑(socket)2.通过subprocess可以在别人的计算机上执行我们想要执行的命令3.把在别人计算机上执行的结果给返回过来"""importsubprocessimportsubprocessres=subprocess.P......
  • cmd关闭防火墙端口
    关闭常用的端口135/137/138/139/445端口netshadvfirewallsetallprofilestateonnetshadvfirewallfirewalladdrulename=deny_TCP135dir=inaction=blockprotocol=TCPlocalport=135netshadvfirewallfirewalladdrulename=deny_TCP135dir=outaction=blockprotoco......
  • dockerfile中ENTRYPOINT和CMD的关系
    在使用Dockerfile构建镜像时,ENTRYPOINT和CMD都可以作为容器启动时的命令,下面是两个DockerFileFROMubuntu:22.04ENTRYPOINT["echo","Hello"]CMD["World","ChatGPT"]CMD["123","ABC"]输出:Hello123ABCFROMubuntu:22.04ENT......
  • KingbaseES V8R6集群运维系列 -- 修改ssh通信为 sys_securecmdd 通信
    一、适用于:本文档使用于KingbaseESV008R006版本。二、关于SYS_SECURECMDD:sys_securecmdd是KingbaseES集群自带的工具,集群监控、管理集群时通过sys_securecmdd安全执行命令而不使用ssh服务。sys_securecmdd主要包含以下文件:服务端sys_securecmdd默认监听8890端口,接受客......
  • C# cmd 生成 exe文件
    生成单独的exe文件C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exeProgram.cs生成exe文件的步骤如下:1.使用文本编辑器(如Notepad++或VisualStudioCode)编写C#源代码,并将其保存为.cs文件(例如,`Program.cs`)。2.打开一个命令提示符(在Windows中按下Windows+......
  • subprocess模块
    subprocess模块【一】介绍subprocess模块允许我们启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。简单理解就是:使用我们自己的电脑去链接别人的电脑(socket模块)【二】使用#windows系统默认的编码格式是:gbkimportsubprocess"""1.使用我们自......
  • 补充:通过Python中的subprocess模块实现安装pip模块
    通过Python代码实现安装pip模块或更新可以使用Python的内置模块subprocess来实现安装pip模块,具体步骤如下:【一】导入subprocess模块。importsubprocess【二】执行安装命令。subprocess.call(['python','-m','ensurepip','--upgrade'])在上面的代码中,调用subproce......