欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python如何啟動cmd批處理文件

 更新時間:2024年06月26日 11:36:26   作者:永遠(yuǎn)的麥田  
這篇文章主要介紹了python如何啟動cmd批處理文件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

一、簡單代碼

直接上代碼,理解起來還是比較簡單,os的簡單,控制力比較小,subprocess的可以將相應(yīng)的cmd輸出獲取到,便于進(jìn)一步分析運行結(jié)果

#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%

運行后輸出如下結(jié)果:

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

二、稍復(fù)雜的代碼

對于普通的應(yīng)用以上的代碼已經(jīng)足夠,若是批處理文件比較特別,比如啟動的批處理帶有鍵盤輸入?yún)?shù),這樣上面的代碼就會出現(xiàn)問題,如下的批處理文件:

  • sam.bat
@echo off
echo 顯示命令行參數(shù) %1%
set /p ver=請輸入版本:
echo 輸入的版本為:%ver%

此文件含有兩種參數(shù)輸入:

  • 其一是命令行參數(shù)
  • 其二是鍵盤輸入?yún)?shù)

要求用戶在執(zhí)行過程中輸入版本號,若是用之前的代碼,

你會發(fā)現(xiàn)程序總是沒有輸入提示,而當(dāng)你輸入完成后,提示及結(jié)果會一并出來

究其原因是由于讀出來的數(shù)據(jù)readline()是以回車換行為標(biāo)志的

提示語句沒有提示換行,因此直到操作完成后才能讀取到提示文字

明白了原因:

改進(jìn)的方法也就出來了,每次只讀取單個字符并顯示,直到讀不到為止,print這樣的函數(shù)默認(rèn)換行并且立即輸出,必須加參數(shù)讓其按文件格式打印.另外,之前的數(shù)據(jù)轉(zhuǎn)換是一次性轉(zhuǎn)換,一般不會出現(xiàn)異常,單個字節(jié)讀取對于中文字而言轉(zhuǎn)換會出異常,必須專門進(jìn)行處理

以下為修改的代碼:

  • 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)

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論