我可以用下面的代碼使用Python運行BC:如何發送輸入並使用Python從bc中獲取輸出?
subprocess.Popen("bc", stdout=subprocess.PIPE).communicate()[0]
然而,這僅僅推出BC,我必須手動輸入我想做的事情,例如,1 + 1。我想用Python將1 + 1發送給bc並獲取輸出。我會怎麼做?
我可以用下面的代碼使用Python運行BC:如何發送輸入並使用Python從bc中獲取輸出?
subprocess.Popen("bc", stdout=subprocess.PIPE).communicate()[0]
然而,這僅僅推出BC,我必須手動輸入我想做的事情,例如,1 + 1。我想用Python將1 + 1發送給bc並獲取輸出。我會怎麼做?
想通了。你必須有標準輸入和標準輸出,並呼籲與以換行符結束,像這樣的字符串溝通:
p = subprocess.Popen("bc", stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate('1+1\n')
出在哪裏是你想要的輸出。
你可以使用'from subprocess import Popen,PIPE'來使代碼更容易閱讀。 – jfs
如何做這樣的事情:
[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
您是否閱讀過文檔? 「Popen.communicate(input = None) - 與進程交互:向stdin發送數據從stdout和stderr中讀取數據,直到到達文件結尾等待進程終止。可選的輸入參數應該是字符串被髮送到子進程,或者沒有,如果沒有數據應該被髮送給孩子。「 –
其他人對如何使用Popen進行了評論。我建議你考慮使用gmpy或gmpy2而不是bc--這些都是C編碼的庫,用於處理可能巨大的數字,可以從python調用。 – dstromberg
我通過什麼來「溝通」? – blacktrance