亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用python運行cmd文件

使用python運行cmd文件

慕斯709654 2023-03-08 10:02:08
我有一個包含 100 行命令的 cmd 文件“file.cmd”。例子 pandoc --extract-media -f docx -t gfm "sample1.docx" -o "sample1.md" pandoc --extract-media -f docx -t gfm "sample2.docx" -o "sample2.md" pandoc --extract-media -f docx -t gfm "sample3.docx" -o "sample3.md"我正在嘗試使用腳本運行這些命令,這樣我就不必轉到文件并單擊它。這是我的代碼,它沒有輸出:file1 = open('example.cmd', 'r') Lines = file1.readlines()# print(Lines)for i in Lines:    print(i)    os.system(i)
查看完整描述

2 回答

?
慕哥9229398

TA貢獻1877條經驗 獲得超6個贊

您不需要逐行閱讀 cmd 文件。您可以簡單地嘗試以下操作:


import os

os.system('myfile.cmd')

或使用子流程模塊:


import subprocess

p = subprocess.Popen(['myfile.cmd'], shell = True, close_fds = True)

stdout, stderr = proc.communicate()

例子:


我的文件.cmd:


@ECHO OFF

ECHO Grettings From Python!

PAUSE

腳本.py:


import os

os.system('myfile.cmd')

cmd 將打開:


Greetings From Python!

Press any key to continue ...

您可以通過以下方式了解返回退出代碼來調試問題:


import os

return_code=os.system('myfile.cmd')

assert return_code == 0 #asserts that the return code is 0 indicating success!

注意:os.system 通過在 C 中調用來工作,system()命令后最多只能使用 65533 個參數(因此這是一個 16 位問題)。再提供一個參數將導致返回代碼32512 (which implies the exit code 127).


查看完整回答
反對 回復 2023-03-08
?
呼喚遠方

TA貢獻1856條經驗 獲得超11個贊

該subprocess模塊提供了更強大的工具來生成新進程并檢索它們的結果;使用該模塊優于使用此功能 ( os.system('command'))。


因為它是一個命令文件(cmd),并且只有 shell 可以運行它,那么 shell 參數必須設置為 true。由于您將 shell 參數設置為 true,因此命令需要是字符串形式而不是列表。


使用Popen生成新進程的方法和等待該進程的通信(您也可以將其超時)。如果您希望與子進程通信,請提供PIPES(參見 mu 示例,但您不必這樣做?。?/p>


下面的代碼適用于 python 3.3 及更高版本


import subprocess


try:

    proc=subprocess.Popen('myfile.cmd', shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE)

    outs, errs = proc.communicate(timeout=15)  #timing out the execution, just if you want, you dont have to!

except TimeoutExpired:

    proc.kill()

    outs, errs = proc.communicate()

對于舊的 python 版本


proc = subprocess.Popen('myfile.cmd', shell=True)

t=10

while proc.poll() is None and t >= 0:

    print('Still waiting')

    time.sleep(1)

    t -= 1


proc.kill()

在這兩種情況下(python 版本),如果您不需要該timeout功能并且不需要與子進程交互,那么只需使用:


proc = subprocess.Popen('myfile.cmd', shell=True)

proc.communicate()


查看完整回答
反對 回復 2023-03-08
  • 2 回答
  • 0 關注
  • 135 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號