2013-02-02 20 views
0

Autodesk Maya 2012提供了「mayapy」 - 一種經過修改的python版本,內容充滿了加載Maya文件所必需的軟件包,並充當批量工作的無頭3D編輯器。我從一個bash腳本調用它。如果該腳本使用cmds.file(filepath, open=True)在其中打開一個場景文件,它會發出警告,錯誤和其他我不想要的信息頁面。當cmds.file命令正在運行時,我想只關閉我該如何靜音來自特定python命令的所有輸出?

我已經嘗試從我發送到shell腳本內的mayapy的Python命令中重定向,但那不起作用。我可以通過在調用bash腳本時將stdout/err重定向到/ dev/null來使所有事情沉默。有什麼辦法可以在調用shell的過程中使它沉默,但仍然允許腳本中的傳入命令打印出信息?

test.sh:

#!/bin/bash 

/usr/autodesk/maya/bin/mayapy -c " 
cmds.file('filepath', open=True); 
print 'hello' 
" 

稱之爲:

$ ./test.sh     # spews info, then prints 'hello' 
$ ./test.sh > /dev/null 2>&1 # completely silent 
+0

我看到你已經嘗試將sys.stdout/err指向死寫方法,但是你是否還嘗試將sys .__ stdout__和sys .__ stderr__指向死寫方法?他們通常指向stdout和stderr的原始值,也許mayapy將這些用於打印方法而不是典型的打印方法? – mglowe

+0

我剛給它一個鏡頭,但它仍然打印出所有額外的信息。 –

+0

就像一個完整性檢查:我正在做'sys.stdout = open('/ dev/null','w')',和stderr一樣,並且你的兩個值用下劃線表示。 –

回答

1

基本上,我認爲解決這個最好的辦法是實現一個包裝,將執行test.sh和消毒輸出到殼。爲了清理輸出,我只需要添加一些字符串來通知包裝器這個文本適合輸出。我對封裝文件的靈感來自這個傳來:https://stackoverflow.com/a/4760274/2030274

的內容如下:

import subprocess 

def runProcess(exe): 
    p = subprocess.Popen(exe, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 
    while(True): 
     retcode = p.poll() #returns None while subprocess is running 
     line = p.stdout.readline() 
     yield line 
     if(retcode is not None): 
     break 

for line in runProcess(['./test.sh']): 
    if line.startswith('GARYFIXLER:'): 
     print line, 

現在你能想象沿着

#!/bin/bash 

/usr/autodesk/maya/bin/mayapy -c " 
cmds.file('filepath', open=True); 
print 'GARYFIXLER:hello' 
" 

這行test.sh是什麼將只打印hello行。由於我們在子進程中封裝了python調用,因此通常顯示在shell中的所有輸出應該被捕獲,並且應該攔截不需要的行。

當然,要從python腳本調用test.sh,您需要確保您擁有正確的權限。

+0

啊,過濾,當然!它效果很好。謝謝您的幫助。 –

0

我知道我只是用管子扭曲。 Maya確實發送全部批輸出到stderror。一旦你正確地將stderr吹走,這將完全釋放stdout。這是一個全功能的單線程工作。

# load file in batch; divert Maya's output to /dev/null 
# then print listing of things in file with cmds.ls() 
/usr/autodesk/maya/bin/mayapy -c "import maya.standalone;maya.standalone.initialize(name='python');cmds.file('mayafile.ma', open=True);print cmds.ls()" 2>/dev/null 
相關問題