2016-06-26 3 views
1

Некоторые фон:
Программа запускает производственную машину. Эта программа работает на Windows XP. Программа управляет машиной и записывает простой журнал производства.
Я написал сценарий python, который просит пользователя ввести название текущего проекта. сценарий записывает имя проекта в файл журнала. Таким образом, у меня есть «разработчики проекта» в файле журнала, и я могу знать, какие производственные данные принадлежат к проекту.
Сценарий отлично работает: имена проектов записываются в файл журнала, если они там не существуют, и выполняется машинная программа.
Проблема заключается в том, что программа не записывает данные о производстве в файл журнала при запуске из сценария. Только при запуске из окон.
Я попытался запустить два экземпляра программы: один из окон и один из скрипта. Скрипт успешно записывает имя проекта в файл, а окна запускают программу, записывая данные в файл успешно. Поэтому я думаю, что это не проблема файла журнала, заблокированного скриптом. Я также проверил, что обе программы работают под одним и тем же пользователем, поэтому это не проблема учетных данных.
Вот сценарий:Разница в поведении программы при запуске из сценария python и из окон

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, а импорт suprocess с subprocess.call, вместо subprocess.Popen
Оба дали одинаковый результат.
Спасибо

Мой код странно, потому что я не программист, и это только мой второй питон скрипт :) Я изменил код в соответствии с 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() 

Но i stll получит тот же результат.

+0

FYI, не печатайте каталог. Каталог приложений можно определить из 'os.path.abspath (os.path.dirname (sys.argv [0])). Другие файлы могут быть открыты относительно этого каталога, например. 'os.path.join (appdir," SteelUsage.bsu ")'. Кроме того, переместите свой импорт в начало скрипта. Целесообразно импортировать один и тот же модуль в цикл. – eryksun

+0

В коде есть пара странных вещей. Сначала сделайте свой импорт вверху и никогда не импортируйте в цикл. Они не будут болеть, но они только импортируют один раз. Во-вторых, sys.exit (0) выйдет из вашей программы, поэтому ваш цикл остановится в первый раз, когда вы получите удар по вводу. Кроме того, ваш код не импортирует sys, поэтому это не ваш полный код. –

+0

Я не понимаю ваш вопрос. Пожалуйста, сократите это до [mcve]. – Teepeemm

ответ

0

Если вы хотите, чтобы программа BadePanel записывалась в файл Steelusage.bsu, вы должны закрыть файл из скрипта python перед вызовом BadePanel.exe. Если вы этого не сделаете, файл все равно будет открыт вашим скриптом, а exe, который вы вызываете, не сможет записать данные в файл.

+0

Это может быть так, но это зависит от того, как программа ожидает совместного доступа к файлу. Python открывает файлы с доступом для чтения и записи. – eryksun