我需要执行一个shell脚本来运行via python命令中的python程序。
我应该像这样执行我的python脚本
ubuntu@ip-10-32-157-231:~/hg_intcen/lib$ xvfb-run python webpage_scrapper.py http://www.google.ca/search?q=navaspot
这个脚本需要在python程序中执行,因为必须将巨大的链接传递给该模块。
我已经搜索过在python中执行这个shell脚本,所以我使用了“subprocess”
主要的是当你运行这个shell命令时,它需要一些时间来返回结果。 我需要python模块来执行这个命令,并且它必须等待while返回结果。这是必需的。
我使用了subprocess.Popen它不会像我从bash那样返回结果
import subprocess
def execute_scrapping(url):
exe_cmd = "xvfb-run python lib/webpage_scrapper.py"+" "+str(url)
print "cmd:"+exe_cmd
proc = subprocess.Popen(exe_cmd,shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE)
time.sleep(15)
sys.stdout.flush()
d=proc.stdout.readlines()
return d[1]
以上内容未达到确切结果。 你能建议我通过python执行bash shell命令并得到结果吗?
答案 0 :(得分:7)
尝试:
proc.wait()
而不是time.sleep(15)
来电。
来自文档:
Popen.wait() - 等待子进程终止。设置并返回returncode属性。
答案 1 :(得分:2)
您应该使用 communicate() 方法等待外部流程完成。
stddata, stderr = proc.communicate()
如果必须在两个进程之间交换消息,请查看pexpect模块:
来自网站:
import pexpect
child = pexpect.spawn ('ftp ftp.openbsd.org')
child.expect ('Name .*: ')
child.sendline ('anonymous')
child.expect ('Password:')
child.sendline ('noah@example.com')
child.expect ('ftp> ')
child.sendline ('cd pub')
child.expect('ftp> ')
child.sendline ('get ls-lR.gz')
child.expect('ftp> ')
child.sendline ('bye')