簡體   English   中英

python作為“批處理”腳本(即從python運行命令)

[英]python as a “batch” script (i.e. run commands from python)

我在Windows環境(我的筆記本電腦!)工作,我需要一些運行其他程序的腳本,就像一個Windows批處理文件。

我如何從python運行命令,使程序運行時,將替換腳本? 該程序是交互式的(例如,同步)並保持打印行並始終要求用戶輸入。

因此,僅運行程序並打印輸出是不夠的。 程序必須接管腳本的輸入/輸出,非常類似於從.bat文件運行命令。

我試過os.execl,但它一直告訴我“無效的參數”,而且,它沒有找到程序名稱(不搜索PATH變量); 我必須給它完整的路徑..?!

基本上,在批處理腳本中我可以寫:unison profile

如何在python中實現相同的效果?

編輯:

我發現它可以用os.system( ... ) ,因為我無法接受我自己的答案,我正在關閉這個問題。


編輯:這應該是一個評論,但當我發布它我沒有多少積分。

謝謝Claudiu,這幾乎是我想要的,除了一點點:我希望函數在程序退出時結束,但是當我一致地嘗試它時,它不會將控制返回到python腳本,而是返回到windows命令行環境

>>> os.execlp("unison")

C:\>Usage: unison [options]
    or unison root1 root2 [options]
    or unison profilename [options]

For a list of options, type "unison -help".
For a tutorial on basic usage, type "unison -doc tutorial".
For other documentation, type "unison -doc topics".

C:\>
C:\>
C:\>

怎么繞過這個?

您應該使用進程模塊創建一個新進程。

我不熟悉windows進程,但它的Popen功能是跨平台的,應該優先考慮OS特定的解決方案。

編輯:我認為你應該更喜歡Subprocess模塊​​到os。* OS特定的功能,它是跨平台和更pythonic(只是google它)。 您可以輕松, 干凈地等待結果:

import os
import subprocess
unison = os.path.join(os.path.curdir, "unison")
p = subprocess.Popen(unison)
p.wait()

我發現os.system做了我想要的,

感謝所有想要幫助的人。

os.system("dir")

運行該命令就像從批處理文件中運行一樣

import subprocess

proc = subprocess.Popen(['unison', 'profile'], stderr=subprocess.PIPE,      
                        stdout=subprocess.PIPE, stdin=subprocess.PIPE)

proc.stdin.write('user input')
print proc.stdout.read()

這應該可以幫助您入門。 如果您想要更詳細的答案,請使用更多信息編輯您的問題!

os.execlp應該工作。 這將搜索您的路徑以獲取該命令。 如果沒有必要,不要給它任何args:

>>> import os
>>> os.execlp("cmd")

D:\Documents and Settings\Claudiu>Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

D:\Documents and Settings\Claudiu>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM