Python 2.6:使用Popen从bash命令获取输入并作为变量进行通信和存储

时间:2015-04-24 23:11:51

标签: python bash subprocess popen

我需要从Bash命令获取输入并将其存储为Python变量(sprice;单个float)。在Python 2.7上,以下效果很好:

bashCommand = "curl -s 'http://download.finance.yahoo.com/d/quotes.csv?s=vwrl.as&f=l1'"
sprice = float(subprocess.check_output(bashCommand, shell=True))

但是 Python 2.6 check_output不可用。相反,我们必须使用:

proc = Popen(['curl', '-s', 'http://download.finance.yahoo.com/d/quotes.csv?s=vwrl.as&f=l1'], stdout=PIPE)
print (proc.communicate()[0].split())

显示我们所追踪的浮动,用括号括起来。

['40.365']

如果我想查看输出并完成,那就没问题。但是我需要将它存储在Python变量中,就像之前的(2.7)案例一样。但是,当我尝试将其分配给变量时,我得到:

Traceback (most recent call last):   
  File "arr.py", line 49, in <module>
    sprice = proc.communicate()[0].split()
  File "/usr/lib/python2.7/subprocess.py", line 791, in communicate
    stdout = _eintr_retry_call(self.stdout.read)
  File "/usr/lib/python2.7/subprocess.py", line 476, in _eintr_retry_call
    return func(*args)
ValueError: I/O operation on closed file

这是正确的方法吗?

2 个答案:

答案 0 :(得分:-1)

int i=atoi(argv[4]);
printf("%d\n",i);

来自http://mywebsite.com/about

  

使用os.popen()在shell中执行字符串cmd并返回2元组   (状态,输出)。 cmd实际上是以{cmd; } 2&gt;&amp; 1,这样   返回的输出将包含输出或错误消息。

答案 1 :(得分:-1)

我的语法错了。这个Q&amp; A直截了当。

Subprocess Popen and PIPE in Python

所以命令是:

  

Popen([&#39; curl&#39;,&#39; -s&#39;,&#39; http://download.finance.yahoo.com/d/quotes.csv?s=vwrl.as&f=l1&#39;],stdout = PIPE).communicate()[0 ]