2012-03-10 39 views
0

我有兩年用C++,TCP/IP服務器和客戶端編寫的實用程序。 服務器打開指定文件並等待客戶端連接。連接建立後,服務器開始發送文件內容。客戶端收到它並保存在一個文件中。 現在,我想編寫一個python腳本來啓動這兩個應用程序並等待它們完成。之後,腳本會做一些其他的工作。它是爲Windows編寫的。 這是我在Python中的第一個腳本。而我的第一個問題是,我可以看到兩個應用程序已經啓動並相互連接。我可以看到它,因爲出現兩個DOS窗口並顯示消息,告訴我有關連接。 但是,我沒有看到一個文件,它必須由客戶端創建。哪裏不對。代碼非常簡單,如下所示。從python代碼啓動的實用程序不寫入文件

import subprocess 

p = subprocess.Popen('C:\MyProjects\exes\FeedSender_exe\FeedSender.exe C:\MyProjects\exes\FeedSender_exe\FeedSender.ini') 
print "Start1" 
p1 = subprocess.Popen('C:\MyProjects\exes\FeedReaderFileProcessor\FeadReaderi41.exe C:\MyProjects\exes\FeedReaderFileProcessor\Config.ini') 
print "Start2" 

for line in p.stdout.readlines(): 
    print line, 
retval = p.wait() 
print "Finish1" 
retval = p1.wait() 
print "Finish2" 
+2

將'r'放在命令行字符串的前面。即'Popen(r'C:\ MyProjects \ ...')' – 2012-03-10 21:13:24

回答

1

它可能會幫助設置子進程的當前工作目錄。

p = subprocess.Popen(r'C:\MyProjects\exes\FeedSender_exe\FeedSender.exe C:\MyProjects\exes\FeedSender_exe\FeedSender.ini', 
     cwd=r'C:\MyProjects\exes\FeedSender_exe') 

根據您如何設置程序,輸出文件應顯示在C:\MyProjects\exes\FeedSender_exe。我顯然無法得到你的程序,所以我無法測試這個。

+0

這確實有幫助。謝謝。 – Ivan 2012-03-12 16:01:35

+0

當我嘗試upvote它說我沒有足夠的特權。但是,我積極回答「這篇文章對你有用嗎?」 – Ivan 2012-03-12 16:39:39

+0

由於你是問問題的人,你仍然應該能夠接受答案。我忘記了需要聲望來upvote。 另外,它工作? – forivall 2012-03-12 19:19:52

0

添加雙 '\' 像這樣:

p = subprocess.Popen('C:\\MyProjects\\exes\\FeedSender_exe\\FeedSender.exe C:\\MyProjects\\exes\\FeedSender_exe\\FeedSender.ini') 
+1

如果你在前面放置'r'使得字符串是原始的,那麼更好和更容易閱讀,參見[docs](httpdocs.python。 org/reference/lexical_analysis.html#strings),即'Popen(r'C:\ MyProjects \ ...')'。 – 2012-03-10 21:18:44

+0

我不知道。涼。謝謝。 – user850498 2012-03-10 21:21:22

+0

儘管在這種特殊情況下它並不重要,因爲在Python中,「與標準C不同,所有不可識別的轉義序列都保留在字符串中,即反斜槓留在字符串中。」http:// docs。 python.org/reference/lexical_analysis.html – forivall 2012-03-10 22:09:25

相關問題