【问题标题】:How do I send input to and get output from bc using Python?如何使用 Python 将输入发送到 bc 并从 bc 获取输出?
【发布时间】:2013-11-09 22:56:48
【问题描述】:

我可以使用 Python 运行 bc,代码如下:

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

但是,这只会启动 bc,我必须手动输入我想要的任何内容,例如 1+1。我想使用 Python 发送 1+1 到 bc 并获取输出。我该怎么做?

【问题讨论】:

  • 您阅读文档了吗? “Popen.communicate(input=None) - 与进程交互:发送数据到标准输入。从标准输出和标准错误读取数据,直到到达文件结尾。等待进程终止。可选的输入参数应该是一个字符串发送到子进程,或者 None,如果不应该向子进程发送数据。"
  • 其他人评论了如何使用 Popen。我建议您考虑使用 gmpy 或 gmpy2 而不是 bc - 这些是 C 编码的库,用于对可能巨大的数字进行操作,可从 python 调用。
  • 我要传递什么来“交流”?

标签: python command-line bc


【解决方案1】:

想通了。你必须有标准输入和标准输出,并调用以换行符结尾的字符串通信,如下所示:

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 使代码更易于阅读。
【解决方案2】:

做这样的事情怎么样:

dogface@computer ~
$ cat oneplusone
1+1
quit

dogface@computer ~
$ 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多