精华内容
下载资源
问答
  • 今天小编就为大家分享一篇python隐藏终端执行cmd命令的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 先后执行两个CMD命令;两个命令之间要'&&'连接 cmd = cmd1 + '&&' + cmd2 cd到某一个路径下,执行某一条命令 C:/Users/A692297/Jinfei/software/PyCharm_project/Py_learn/Data_process/test...

    我的某一个路径下有一个脚本,希望通过命令行还实现运行;或者我希望打开CMD窗口运行命令;

    先后执行两个CMD命令;两个命令之间要'&&'连接

    cmd = cmd1 + '&&' + cmd2

     cd到某一个路径下,执行某一条命令

    C:/Users/A692297/Jinfei/software/PyCharm_project/Py_learn/Data_process/test路径下有一个Data_process_test.py脚本,我希望执行并输出结果到指定文件夹
    import os
    import time
    
    def cmd1():
        try:
            print("hello")
            cmd1 = 'cd C:/Users/A692297/Jinfei/software/PyCharm_project/Py_learn/Data_process/test'
            cmd2 = 'python .\Data_process_test.py >> result1.txt'
            cmd = cmd1 + '&&' + cmd2
            os.popen(cmd)
        except Exception as e:
            print("cloc tool fail:" + str(e))
    
    cmd1()

     

    展开全文
  • python运行cmd命令的方法

    千次阅读 2018-08-29 01:10:10
    运行环境为 Python3 我工作的python环境是2.7 这一块一般和python装饰器配合使用,...这样就可以调用系统的ls命令了,但是这样没法获取ls的输出。 这个是我的首选,第一是怕麻烦,第二是python2支持的比较好...
    运行环境为 Python3
    

    我工作的python环境是2.7
    这一块一般和python装饰器配合使用,python也需要监控某个类或者函数的状态和执行时间。或者直接处理进程,这些函数都比较实用。
    我的需求就是在某个指定函数执行完后,将一些进程杀死。这个需求,第一个方法完全就够用了。

    最硬的调用

    import os
    os.system("kill task sometask")
    

    这样就可以调用系统的ls命令了,但是这样没法获取ls的输出。

    这个是我的首选,第一是怕麻烦,第二是python2支持的比较好。

    通过 subprocess 调用

    我用这个是失败的的,应该是我的python的环境冲突了,我同时装了2和3.

    import subprocess
    process = subprocess.Popen("ls", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

    这里通过将stdout重定向到subprocess.PIPE上来取得ls命令的输出,如果想将stderr也重定向到subprocess.PIPE上,stderr=subprocess.STDOUT改成stderr=subprocess.PIPE即可。

    如何通过 subprocess 读取命令行的输出

    重点就是读取命令行的输出
    这个同上。但在我的笔记本环境是正常的。

    我们使用 subprocess 执行命令行后,可以通过process.stdout.read()来读取命令行输出,不过process.stdout.read()返回的是bytes,要想取得str,可以直接调用process.stdout.read().decode(‘utf-8’)。

    最终的代码大概是这样的

    import subprocess
    process = subprocess.Popen("ls", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    command_output = process.stdout.read().decode('utf-8')

    Notices:
    有些命令行是异步执行的不会马上返回输出,所以有时候我们要先等这个命令行执行完毕才能从stdout读出来数据。这个时候要加上process.wait()

    并发的毛病,需要等待,参数需要有stdout和stderr。(java也有类似的机制)

    import subprocess
    process = subprocess.Popen("ls", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    process.wait()
    command_output = process.stdout.read().decode('utf-8')

    最后,再次吐槽,这md的排版也都是够了。我在本地使用其实很正常,上传后就duang,duang,duang了。一脸懵逼

    展开全文
  • 运行cmd开始时,使用os.popen()执行命令,但是该命令需要手动修改运行目录。此方案被我直接丢弃了。单开进程那么自然想到通过启动进程的方式来实现,Python有对进程的封装subprocess,可以通过创建...

    之前是想写一个微信控制程序,通过登录网页微信,可以直接执行命令行代码。也不用ssh登录了,想法很方便。

    但是现实很残酷,微信登录这块基本没有问题,已经有大佬写好了,但是命令行执行遇到问题了。

    运行cmd

    开始时,使用os.popen()执行命令,但是该命令需要手动修改运行目录。此方案被我直接丢弃了。

    单开进程

    那么自然想到通过启动进程的方式来实现,Python有对进程的封装subprocess,可以通过创建Popen对象来实现。我只要单开一个bash,与它进行交互就好啦。

    简单实现如下:p = subprocess.Popen("/bin/bash", shell=True, stdin=subprocess.PIPE, stderr=subprocess.PIPE, stdout=subprocess.PIPE)while True: c = input() c += os.linesep p.stdin.write(c.encode("utf8")) print(out_s.decode("utf8"), end="")

    然后,马上就有遇到问题了,输出流一直拿不到内容,被阻塞了。

    刷新缓冲区

    被阻塞有两种情况,一输入流阻塞,所以没有输出,二输出流阻塞。看到网上有的将输入流关闭就可以了:p.stdin.close()

    但是关闭后就不能再次运行命令了,通过查看其对象方法,发现可以直接刷新缓冲区,很好p.stdin.flush()

    但是发现读取到的文件只有一行,很明显,没有读完

    循环读取

    需要循环读取输出缓冲区的内容。while True: out_s = p.stdout.readline() print(out_s.decode("utf8"), end="")

    新的问题出现了,循环怎么结束啊?当缓冲区没有内容时,readline方法会阻塞等待。

    读取阻塞

    很好,找了半天也没找到解决阻塞的办法。那就只能靠自己了,既然它要阻塞,那就随他阻塞好了,我单开一个线程去读取,让它一直阻塞去吧。

    解决后的完整测试代码:import subprocessimport osimport threadingp = subprocess.Popen("/bin/bash", shell=True, stdin=subprocess.PIPE, stderr=subprocess.PIPE, stdout=subprocess.PIPE)def test(): global p while True: print(p.stdout.readline().decode("utf8"), end="")threading.Thread(target=test).start()while True: c = input() c += os.linesep p.stdin.write(c.encode("utf8")) p.stdin.flush()

    很好,问题解决了,简单封装一个工具类吧。

    注意:如果输入一个不存在的命令,输出内容不在stdout流中,要到stderr中获取。此方案暂时还不支持sudo命令,回头在研究研究

    至此,其实还有一个小问题,我怎么能知道哪些返回是同一条命令所返回的呢?就这个微信工具来说,自然可以直接通过时间判断,若超过1s没有,则认为是一组,统一返回。感觉有些牵强,暂时没有想到更好的解决办法。

    最后奉上工具链接:

    展开全文
  • python怎么打开cmd-python中调用cmd

    千次阅读 2020-11-11 14:22:58
    cmd")这是最简单的一种方法,特点是执行的时候程序会打出cmd在linux上执行的信息。使用前需要import os。os.system("ls")2. 使用Popen模块产生新的process现在大部分人都喜欢使用Popen。Popen方法...

    1. 使用os.system("cmd")

    这是最简单的一种方法,特点是执行的时候程序会打出cmd在linux上执行的信息。使用前需要import os。

    os.system("ls")

    2. 使用Popen模块产生新的process

    现在大部分人都喜欢使用Popen。Popen方法不会打印出cmd在linux上执行的信息。的确,Popen非常强大,支持多种参数和模式。使用前需要from subprocess import Popen, PIPE。但是Popen函数有一个缺陷,就是它是一个阻塞的方法。如果运行cmd时产生的内容非常多,函数非常容易阻塞住。解决办法是不使用wait()方法,但是也不能获得执行的返回值了。

    Popen原型是:

    1 subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=Fal

    参数bufsize:指定缓冲。我到现在还不清楚这个参数的具体含义,望各个大牛指点。

    参数executable用于指定可执行程序。一般情况下我们通过args参数来设置所要运行的程序。如果将参数shell设为 True,executable将指定程序使用的shell。在windows平台下,默认的shell由COMSPEC环境变量来指定。

    参数stdin, stdout, stderr分别表示程序的标准输入、输出、错误句柄。他们可以是PIPE,文件描述符或文件对象,也可以设置为None,表示从父进程继承。

    参数preexec_fn只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用。

    参数Close_sfs:在windows平台下,如果close_fds被设置为True,则新创建的子进程将不会继承父进程的输入、输出、错误管 道。我们不能将close_fds设置为True同时重定向子进程的标准输入、输出与错误(stdin, stdout, stderr)。

    如果参数shell设为true,程序将通过shell来执行。

    参数cwd用于设置子进程的当前目录。

    参数env是字典类型,用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。

    参数Universal_newlines:不同操作系统下,文本的换行符是不一样的。如:windows下用’/r/n’表示换,而Linux下用 "/n’。如果将此参数设置为True,Python统一把这些换行符当作’/n’来处理。

    参数startupinfo与createionflags只在windows下用效,它们将被传递给底层的CreateProcess()函数,用 于设置子进程的一些属性,如:主窗口的外观,进程的优先级等等。

    subprocess.PIPE

    在创建Popen对象时,subprocess.PIPE可以初始化stdin, stdout或stderr参数,表示与子进程通信的标准流。

    subprocess.STDOUT

    创建Popen对象时,用于初始化stderr参数,表示将错误通过标准输出流输出。

    Popen的方法:

    Popen.poll()

    用于检查子进程是否已经结束。设置并返回returncode属性。

    Popen.wait()

    等待子进程结束。设置并返回returncode属性。

    Popen.communicate(input=None)

    与子进程进行交互。向stdin发送数据,或从stdout和stderr中读取数据。可选参数input指定发送到子进程的参数。 Communicate()返回一个元组:(stdoutdata, stderrdata)。注意:如果希望通过进程的stdin向其发送数据,在创建Popen对象的时候,参数stdin必须被设置为PIPE。同样,如 果希望从stdout和stderr获取数据,必须将stdout和stderr设置为PIPE。

    Popen.send_signal(signal)

    向子进程发送信号。

    Popen.terminate()

    停止(stop)子进程。在windows平台下,该方法将调用Windows API TerminateProcess()来结束子进程。

    Popen.kill()

    杀死子进程。

    Popen.stdin

    如果在创建Popen对象是,参数stdin被设置为PIPE,Popen.stdin将返回一个文件对象用于策子进程发送指令。否则返回None。

    Popen.stdout

    如果在创建Popen对象是,参数stdout被设置为PIPE,Popen.stdout将返回一个文件对象用于策子进程发送指令。否则返回 None。

    Popen.stderr

    如果在创建Popen对象是,参数stdout被设置为PIPE,Popen.stdout将返回一个文件对象用于策子进程发送指令。否则返回 None。

    Popen.pid

    获取子进程的进程ID。

    Popen.returncode

    获取进程的返回值。如果进程还没有结束,返回None。

    p = Popen("cp -rf a/* b/", shell=True, stdout=PIPE, stderr=PIPE)

    p.wait()if p.returncode !=0:print "Error."

    return -1

    展开全文
  • 特殊问题: 在cmd命令窗口中输入python --version之后没有反应 输入python之后 无法打开python编译器 如下图所示 解决方法: 找到系统中的 关掉这两个选项 搞定~
  • 一般来说,shell无法做到这一点....另外,一般来说,您将真正需要一个绝对路径到您的脚本,因为新的终端窗口将运行一个新的shell,因此不一定有相同的工作目录.但是我会忽略这些例子.使用Windows cmd,最简单的方法是sta...
  • python调用cmd窗口执行命令或脚本

    万次阅读 2019-04-02 16:24:19
    此方法是用于解决pyinstaller打包失败,或者打包成功但无法运行的情况 (如果打包EXE成功执行了,就别再往下看了) ...这是为了解决非开发人员(貌似没见过电脑的同事和不会cmd的人)来使用你开发的程序的
  • python调用cmd命令行操作

    万次阅读 2019-02-23 16:40:53
    cmd:标准像子进程传入需要执行的shell命令,如:ls -al subprocess.PIPE:在创建Popen对象时,subprocess.PIPE可以初始化为stdin, stdout或stderr的参数,表示与子进程通信的标准输入流,标准输出流以及标准错误...
  • 如何在Python调用cmd时隐藏窗口 from subprocess import Popen from win32process import CREATE_NO_WINDOW Popen(args, creationflags=CREATE_NO_WINDOW)
  • 今天小编就为大家分享一篇selenium+python 去除启动的黑色cmd窗口方法。具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • Python实现cmd命令连续执行

    千次阅读 2019-12-28 18:46:16
    之前是想写一个微信控制程序,通过...开始时,使用os.popen()执行命令,但是该命令需要手动修改运行目录。此方案被我直接丢弃了。 单开进程 那么自然想到通过启动进程的方式来实现,Python有对进程的封装subproc...
  • 一般来说,shell无法做到这一点....另外,一般来说,您将真正需要一个绝对路径到您的脚本,因为新的终端窗口将运行一个新的shell,因此不一定有相同的工作目录.但是我会忽略这些例子.使用Windows cmd,最简单的方法是sta...
  • 需要注意的是如果不显示命令窗口运行,一些方法可能无法实现,比如ping,我有一个查询IP是否在线的脚本,期间需要一直让命令窗口保持待机状态,如果此时使用上述方法,则脚本依然可以正常运行,但不会显示ping的结果...
  • 打包exe命令:(具体的命令网上资料很多) # 打包1个py文件,并隐藏执行窗口 pyinstaller -F -w main.py # 打包1个py文件(-F),并隐藏执行窗口(-w),替换exe的ico图标(-i img.ico) pyinstaller -F -w -i img.ico ...
  • 查看python所安装的版本,并退出命令行模式 进入要运行的目录下 使用python **.py来运行相应文件。...注意:有的时候会提示Python不是内部命令,需要将python.exe所在目录添加到环境变量中。 ...
  • python 调用cmd命令时遇到的路径空格问题和中文乱码问题0x00 问题0x02 解决 0x00 问题 1、路径空格 在使用python调用cmd指令时,遇到路径中包含空格,会出现路径找不到的问题。 2、在python调用cmd指令时,若出现...
  • 大家都应该会CMD命令吧! 什么你不会? 看连接:CMD命令大全 大家肯定跟我一样,懒得记!那我就想到自己用python做一个命令行呗!有想法一样的朋友点个赞!谢谢! 运用到的库 1.click库 click:官方github...
  • 如何在cmd命令提示符里打开Python

    千次阅读 2019-10-28 16:12:01
    如何在windows 10 的cmd命令提示符里打开Python 首先,在控制面板(这个可以桌面图标里找到windows 系统)在里打开高级系统设置 然后再高级系统设置里选择高级,进行系统环境变量设置。 然后在我的系统变量里添加...
  • path = r"E:\kettle71\data-integration\oracle_to_mssql.bat" cmd = f"start cmd /b /k {path}" res = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) print(res.pid)
  • 现在想通过cmd打开具有中文路径的文件,用os.system(command)打不开,返回的错误是乱码看不懂。 cmd的默认编码是cp936,也就是gb2312,我尝试改为utf-8。 解决办法: 前提要pychram的文件编码要设置成gbk,亲测有用...
  • 进入: 直接输入python即可,如图所示 ... 您可能感兴趣的文章:对python中执行DOS命令的3种方法总结python退出命令是什么?详解python退出方法Python 获得命令行参数的方法(推荐)python清空命令行方式
  • Python】并行运行多个cmd命令

    千次阅读 2021-02-20 16:59:12
    有时候需要同时运行多个cmd命令,如果手动打开一个个cmd再输入指令的话,就会非常慢。 如果通过&符号使得命令连续运行,指令是有先后顺序的(即串行的),运行完一条才会运行下一条,效率也很低,所以我们可以...
  • python软件安装成功后,Windows+R运行cmd命令提示符,可是当输入phthon后,提示“python不是内部或外部命令,也不是客运行的程序或批处理文件”,也就命令提示符中并没有启动python程序。这是因为没有导入启动路径,...
  • python调用Windows的cmd命令

    万次阅读 2018-04-26 09:22:37
    关于python调用cmd命令:主要介绍两种方式:python的os模块os模块调用CMD命令有两种方式:os.popen(),os.system() 都是用当前进程来调用。os.system是无法获取返回值的。当运行结束后接着往下面执行程序。用法如:...
  • Python:在CMD窗口中调用python函数

    万次阅读 2018-11-12 14:39:50
    本文主要以CMD为例说明如何使用命令行运行某一个py文件下面的一个函数,主要使用如下代码: python -c "function_name(args)" 这其中主要有两种情况: A.Python文件中只包含一个函数,而且不需要输入...
  • 个人理解,cmd的设置中给cmd的访问限制了路径,我们只能通过命令符访问路径中有的部分,而不能访问未添加的。 比如我们需要查询我们安装的python版本 输入了代码:python --version 然后给我们报了一个错,长这个...
  • 通常,没有办法从shell中执行此...另外,请注意,一般来说,您实际上需要脚本的绝对路径,因为新的终端窗口将运行新的Shell,因此不一定具有相同的工作目录。但对于示例,我将忽略它。使用Windows cmd,最简单的方...
  • 设置CMD窗口位置

    2016-01-24 19:30:56
    使用dos命令设置CMD窗口位置
  • 使用cmd命令提示符调用Python脚本,提示Python not found. 原因分析: 在安装Python过程中没有勾选选项- Add Python to environment variables. 重新设置,或者重新安装过程中勾选该选项,再次调用脚本即可成功...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,529
精华内容 10,211
关键字:

python打开cmd命令窗口

python 订阅