小天的树 發表於 2019-9-5 20:53:00

python执行cmd命令

<p>  我们在做手机端自动化的时候有时候可能会遇到需要执行cmd命令完成用例,我们一起学习下,通过python脚本执行cmd命令</p>
<h1>cmd是什么</h1>
<p>cmd是command的缩写.即命令提示行(CMD),是在OS / 2 , Win为基础的操作系统(包括Windows 2000和XP中, Vista中,和Server 2003 )下的“MS-DOS 方式”。中文版Windows XP 中的命令提示符进一步提高了与DOS 下操作命令的兼容性,用户可以在命令提示符直接输入中文调用文件&nbsp; ----来自百度百科</p>
<p>其实说白了就是windows中执行一些命令的地方。</p>
<h1>python操作cmd</h1>
<p>我们通常可以使用os模块的命令进行执行cmd</p>
<h3>方法1:</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">os.system(执行的命令)
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 源码</span>
<span style="color: rgba(0, 0, 255, 1)">def</span> system(*args, **kwargs): <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> real signature unknown</span>
    <span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)"> Execute the command in a subshell. </span><span style="color: rgba(128, 0, 0, 1)">"""</span>
    <span style="color: rgba(0, 0, 255, 1)">pass</span></pre>
</div>
<p><img src="https://img2018.cnblogs.com/blog/1171635/201909/1171635-20190905190801397-2125774010.png" alt=""></p>
<p>&nbsp;我们可以看到os.system成功的把我们输入的内容给返回回来了,其中代码0 表示执行成功。但是我们没有办法获取输出的信息内容</p>
<h3>方法2:</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">os.popen(执行的命令)

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 源码</span>
<span style="color: rgba(0, 0, 255, 1)">def</span> popen(cmd, mode=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">r</span><span style="color: rgba(128, 0, 0, 1)">"</span>, buffering=-1<span style="color: rgba(0, 0, 0, 1)">):
    </span><span style="color: rgba(0, 0, 255, 1)">if</span> <span style="color: rgba(0, 0, 255, 1)">not</span><span style="color: rgba(0, 0, 0, 1)"> isinstance(cmd, str):
      </span><span style="color: rgba(0, 0, 255, 1)">raise</span> TypeError(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">invalid cmd type (%s, expected string)</span><span style="color: rgba(128, 0, 0, 1)">"</span> %<span style="color: rgba(0, 0, 0, 1)"> type(cmd))
    </span><span style="color: rgba(0, 0, 255, 1)">if</span> mode <span style="color: rgba(0, 0, 255, 1)">not</span> <span style="color: rgba(0, 0, 255, 1)">in</span> (<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">r</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">w</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">):
      </span><span style="color: rgba(0, 0, 255, 1)">raise</span> ValueError(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">invalid mode %r</span><span style="color: rgba(128, 0, 0, 1)">"</span> %<span style="color: rgba(0, 0, 0, 1)"> mode)
    </span><span style="color: rgba(0, 0, 255, 1)">if</span> buffering == 0 <span style="color: rgba(0, 0, 255, 1)">or</span> buffering <span style="color: rgba(0, 0, 255, 1)">is</span><span style="color: rgba(0, 0, 0, 1)"> None:
      </span><span style="color: rgba(0, 0, 255, 1)">raise</span> ValueError(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">popen() does not support unbuffered streams</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
    </span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> subprocess, io
    </span><span style="color: rgba(0, 0, 255, 1)">if</span> mode == <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">r</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:
      proc </span>=<span style="color: rgba(0, 0, 0, 1)"> subprocess.Popen(cmd,
                              shell</span>=<span style="color: rgba(0, 0, 0, 1)">True,
                              stdout</span>=<span style="color: rgba(0, 0, 0, 1)">subprocess.PIPE,
                              bufsize</span>=<span style="color: rgba(0, 0, 0, 1)">buffering)
      </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> _wrap_close(io.TextIOWrapper(proc.stdout), proc)
    </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">:
      proc </span>=<span style="color: rgba(0, 0, 0, 1)"> subprocess.Popen(cmd,
                              shell</span>=<span style="color: rgba(0, 0, 0, 1)">True,
                              stdin</span>=<span style="color: rgba(0, 0, 0, 1)">subprocess.PIPE,
                              bufsize</span>=<span style="color: rgba(0, 0, 0, 1)">buffering)
      </span><span style="color: rgba(0, 0, 255, 1)">return</span> _wrap_close(io.TextIOWrapper(proc.stdin), proc)</pre>
</div>
<p>可以发现输出后的内容是一个对象,默认是以读的方式打开</p>
<p><img src="https://img2018.cnblogs.com/blog/1171635/201909/1171635-20190905185826351-143480318.png" alt=""></p>
<p>我们可以通过读取文件对象,获取返回的信息内容</p>
<p><img src="https://img2018.cnblogs.com/blog/1171635/201909/1171635-20190905190501357-1351306757.png" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>我们可以在这里执行cmd的命令,获取返回内容,进行对返回内容取出来,方便我们进行其他测试。取出返回信息参考appium---Android app资源监控</p>
<p>&nbsp;</p>
<p><strong>如果写的对您有帮助,点个关注。持续更新中~~</strong></p>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/qican/p/11468866.html
頁: [1]
查看完整版本: python执行cmd命令