【发布时间】:2016-06-26 15:14:21
【问题描述】:
一些背景:
程序运行制造机器。该程序在 Windows XP 上运行。程序控制机器并编写简单的制造日志。
我写了一个 python 脚本,要求用户输入当前的制造项目名称。该脚本将项目名称写入日志文件。这样,我在日志文件中有“项目开发者”,我可以知道哪些制造数据属于哪个项目。
该脚本工作正常:如果项目名称之前不存在,则将项目名称写入日志文件,然后执行机器程序。
问题是,当从脚本运行时,程序不会将制造数据写入日志文件。仅当从 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()
我也尝试过将 import os 与 os.system 一起使用,并将 suprocess 与 subprocess.call 一起使用,而不是 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()
但我仍然会得到相同的结果..
【问题讨论】:
-
仅供参考,不要对目录进行硬编码。应用程序目录可以从
os.path.abspath(os.path.dirname(sys.argv[0]))确定。可以相对于该目录打开其他文件,例如os.path.join(appdir, "SteelUsage.bsu")。此外,将您的导入移动到脚本的顶部。循环重复导入同一个模块是没有意义的。 -
您的代码有一些奇怪的地方。首先,在顶部进行导入,并且永远不要循环导入。它们不会受到伤害,但无论如何它们只会导入一次。其次, sys.exit(0) 将退出您的程序,因此您的循环将在您第一次收到输入时停止。此外,您的代码没有导入 sys,因此这不是您的完整代码。
-
我不明白你的问题。请将其缩减为minimal reproducible example。
-
我的代码很奇怪,因为我不是程序员,这只是我的第二个 python 脚本 :)
-
嗨,我修改了代码,正如你在我编辑的帖子中看到的那样。谢谢你的建议
标签: python windows logging exe