2013-11-09 42 views
1

我可以用下面的代碼使用Python運行BC:如何發送輸入並使用Python從bc中獲取輸出?

subprocess.Popen("bc", stdout=subprocess.PIPE).communicate()[0] 

然而,這僅僅推出BC,我必須手動輸入我想做的事情,例如,1 + 1。我想用Python將1 + 1發送給bc並獲取輸出。我會怎麼做?

+1

您是否閱讀過文檔? 「Popen.communicate(input = None) - 與進程交互:向stdin發送數據從stdout和stderr中讀取數據,直到到達文件結尾等待進程終止。可選的輸入參數應該是字符串被髮送到子進程,或者沒有,如果沒有數據應該被髮送給孩子。「 –

+0

其他人對如何使用Popen進行了評論。我建議你考慮使用gmpy或gmpy2而不是bc--這些都是C編碼的庫,用於處理可能巨大的數字,可以從python調用。 – dstromberg

+0

我通過什麼來「溝通」? – blacktrance

回答

3

想通了。你必須有標準輸入和標準輸出,並呼籲與以換行符結束,像這樣的字符串溝通:

p = subprocess.Popen("bc", stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
out, err = p.communicate('1+1\n') 

出在哪裏是你想要的輸出。

+0

你可以使用'from subprocess import Popen,PIPE'來使代碼更容易閱讀。 – jfs

0

如何做這樣的事情:

[email protected] ~ 
$ cat oneplusone 
1+1 
quit 

[email protected] ~ 
$ python3 
Python 3.2.3 (default, Jul 23 2012, 16:48:24) 
[GCC 4.5.3] on cygwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import subprocess 
>>> subprocess.call(["bc", "-q", "oneplusone"]) 
2 
0 
相關問題