2012-03-10 48 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