繁体   English   中英

从python脚本和从Windows运行时程序行为的差异

[英]difference in program behavior when run from python script and from windows

一些背景:
程序运行制造机器。 该程序在Windows XP上运行。 程序控制机器并编写简单的制造日志。
我写了一个python脚本,要求用户输入当前的制造项目名称。 该脚本将项目名称写入日志文件。 这样,我在日志文件中有“项目deviders”,我可以知道哪些制造数据属于哪个项目。
该脚本工作正常:如果之前不存在项目名称,则将其写入日志文件,并执行机器程序。
问题是,程序在从脚本运行时不会将制造数据写入日志文件。 仅在从Windows运行时。
我尝试运行该程序的两个实例:一个来自windows,另一个来自脚本。 脚本成功地将项目名称写入文件,并且Windows运行程序成功地将数据写入文件。 所以我认为这不是脚本锁定的日志文件的问题。 我还检查了两个程序在同一个用户下运行,因此它不是凭据问题。
这是脚本:

file = open("C:\\Documents and Settings\\User1\\Desktop\\BPanel\BadePanel\\SteelUsage.bsu", "a+")
input = raw_input("Please enter project name:")
input = input.upper ()
for line in file.readlines():
        if input in line:
            print "Project name already exists, executing BadePanel"
            import time
            time.sleep(4)
            import subprocess
            subprocess.Popen(['C:\\Documents and Settings\\User1\\Desktop\\BPanel\BadePanel\\BadePanel.exe'])
            sys.exit(0)
file.write (input+"\n")
print "Project name written to file, executing BadePanel"
import time
time.sleep(4)
import subprocess
subprocess.Popen(['C:\\Documents and Settings\\User1\\Desktop\\BPanel\BadePanel\\BadePanel.exe'])
sys.exit(0)
file.close()  

我也尝试使用带os.system的import os,并使用subprocess.call导入suprocess,而不是subprocess.Popen
两者给出了相同的结果
谢谢

我的代码很奇怪,因为我不是程序员,这只是我的第二个python脚本:)我根据eryksun,joel和caenyon的建议更改了代码:

file = open("C:\\Documents and settings\\User1\\Desktop\\BPanel\BadePanel\\SteelUsage.bsu", "a+")
import time
import subprocess
input = raw_input("Please enter project name:")
input = input.upper ()
for line in file.readlines():
        if input in line:
            print "Project name already exists, executing BadePanel"
            import time
            time.sleep(4)
            file.close()
            subprocess.Popen(['C:\\Documents and Settings\\User1\\Desktop\\BPanel\\BadePanel.exe'])
            exit()
file.write (input+"\n")
print "Project name written to file, executing BadePanel"
time.sleep(4)
file.close()
subprocess.Popen(['C:\\Documents and Settings\\User1\\Desktop\\BPanel\BadePanel\\BadePanel.exe'])
exit()  

但我会得到相同的结果..

如果您希望程序BadePanel写入Steelusage.bsu文件,则应在调用BadePanel.exe之前从python脚本中关闭该文件。 如果不这样做,脚本仍将打开该文件,并且您调用的exe将无法将数据写入该文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM