python如何啟動cmd批處理文件
一、簡單代碼
直接上代碼,理解起來還是比較簡單,os的簡單,控制力比較小,subprocess的可以將相應的cmd輸出獲取到,便于進一步分析運行結果
#import os
#os.system("c:\\sam.bat")
import subprocess
cmd = 'cmd.exe c:\\sam.bat'
p = subprocess.Popen("cmd.exe /c" + "c:\\sam.bat abc", stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
curline = p.stdout.readline()
while(curline != b''):
print(curline)
curline = p.stdout.readline()
p.wait()
print(p.returncode)附上sam.bat文件:
echo Hello world! echo show %1%
運行后輸出如下結果:
b'\r\n'
b'c:\\Python34>echo Hello world! \r\n'
b'Hello world!\r\n'
b'\r\n'
b'c:\\Python34>echo show abc \r\n'
b'show abc\r\n'
0
二、稍復雜的代碼
對于普通的應用以上的代碼已經足夠,若是批處理文件比較特別,比如啟動的批處理帶有鍵盤輸入參數(shù),這樣上面的代碼就會出現(xiàn)問題,如下的批處理文件:
- sam.bat
@echo off echo 顯示命令行參數(shù) %1% set /p ver=請輸入版本: echo 輸入的版本為:%ver%
此文件含有兩種參數(shù)輸入:
- 其一是命令行參數(shù)
- 其二是鍵盤輸入參數(shù)
要求用戶在執(zhí)行過程中輸入版本號,若是用之前的代碼,
你會發(fā)現(xiàn)程序總是沒有輸入提示,而當你輸入完成后,提示及結果會一并出來
究其原因是由于讀出來的數(shù)據readline()是以回車換行為標志的
提示語句沒有提示換行,因此直到操作完成后才能讀取到提示文字
明白了原因:
改進的方法也就出來了,每次只讀取單個字符并顯示,直到讀不到為止,print這樣的函數(shù)默認換行并且立即輸出,必須加參數(shù)讓其按文件格式打印.另外,之前的數(shù)據轉換是一次性轉換,一般不會出現(xiàn)異常,單個字節(jié)讀取對于中文字而言轉換會出異常,必須專門進行處理
以下為修改的代碼:
- sam.py
import subprocess
cmd = 'cmd.exe c:\\sam.bat'
p = subprocess.Popen("cmd.exe /c" + "c:\\sam.bat abc", stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
byte_data = p.stdout.read(1)
word_data = b''
while(byte_data != b''):
word_data += byte_data
try:
showdata = word_data.decode('gb2312')
print(showdata, end="", flush=True)
word_data = b''
except Exception as e:
#print(e)
a=0
byte_data = p.stdout.read(1)
p.wait()
print(p.returncode)總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
python導出chrome書簽到markdown文件的實例代碼
python導出chrome書簽到markdown文件,主要就是解析chrome的bookmarks文件,然后拼接成markdown格式的字符串,最后輸出到文件即可。下面給大家分享實例代碼,需要的朋友參考下2017-12-12
Django+python服務器部署與環(huán)境部署教程詳解
這篇文章主要介紹了Django+python服務器部署與環(huán)境部署教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03

