我想在Java中運行這個Python程序。程序終止沒有任何錯誤
問題: 當我從命令行運行此程序:Python的msp.py丹尼斯 - 聖 - 何塞 - 2 - 它WORKS
當我通過這個java程序調用相同的腳本。它只是終止。 我測試了其他的python腳本,他們工作!
public void pythonrun(String args) throws IOException, InterruptedException
{
String pythonScriptPath = "/yelp/msp.py";
String[] cmd = new String[2 + args.length()];
cmd[0] = "C:\\Python27\\python.exe";
cmd[1] = pythonScriptPath;
for(int i = 0; i < args.length(); i++) {
cmd[i+2] = args;
}
// create runtime to execute external command
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec(cmd);
//pr.waitFor();
// retrieve output from python script
BufferedReader bfr = new BufferedReader(new InputStreamReader(pr.getInputStream()));
String line = "";
while((line = bfr.readLine()) != null) {
// display each output line form python script
System.out.println(line);
}
}
public static void main(String args[]) throws IOException, InterruptedException {
YelpPython demo = new YelpPython();
demo.pythonrun("dennys-san-jose-2");
}
腳本(msp.py):
它能做什麼? (總之,該腳本都到了頁面和擦傷評論)
from bs4 import BeautifulSoup
from urllib import urlopen
import sys
queries = 0
while queries <201:
stringQ = sys.argv[1]
page = urlopen('http://www.yelp.com/biz/' + stringQ)
soup = BeautifulSoup(page)
reviews = soup.findAll('p', attrs={'itemprop':'description'})
authors = soup.findAll('span', attrs={'itemprop':'author'})
flag = True
indexOf = 1
for review in reviews:
dirtyEntry = str(review)
while dirtyEntry.index('<') != -1:
indexOf = dirtyEntry.index('<')
endOf = dirtyEntry.index('>')
if flag:
dirtyEntry = dirtyEntry[endOf+1:]
flag = False
else:
if(endOf+1 == len(dirtyEntry)):
cleanEntry = dirtyEntry[0:indexOf]
break
else:
dirtyEntry = dirtyEntry[0:indexOf]+dirtyEntry[endOf+1:]
f=open("reviews.txt", "a")
f.write(cleanEntry)
f.write("\n")
f.close
queries = queries + 40
問題(簡言之):
當我運行通過命令行這個腳本,它的工作原理和它終於商店a reviews.txt文件。但是當我通過這個程序運行它時,什麼也沒有發生
我玩過pr.wait()和pr.waitfor(),但沒有任何反應。
請指教。
謝謝。
你能幫我解決嗎?我只是想通過該字符串作爲參數。我如何修改這個腳本以適合我的需求?我正在通過「dennys-san-jose-2」或類似的東西。 –
@Rocky,我給答案增加了兩種可能性,一種是如果你只想要一個參數,另一種是如果你想傳遞一個字符串數組。 – paxdiablo
男人你是一個救星! 'SO'岩石!我會檢查並通知你! –