#python #loops #batch-file #spyder #modeling
#python #циклы #пакетный файл #spyder #моделирование
Вопрос:
Я разработал следующий цикл для запуска модели с различным набором осадков с использованием цикла. Скрипт работает правильно, за исключением процесса выполнения моего .bat
файла.
import os
import glob
import subprocess
ws = (r'C:UsersWahid HussainzadaDesktopTakahashi_2018_9_test')
os.chdir(ws)
myFile = glob.glob('*.txt')
myModel = glob.glob('2cdrmv3.bat')
for i in myFile:
if i.startswith('rain'):
print(i)
myBat = open(ws 'wahid.bat','w ')
myBat.write('cdrmv3.exe param1.txt param2.txt param3.txt param4.txt bsndir.txt slope.txt length.txt order.txt takahashi_landuse.txt takahashi_acc.txt 0 # 1 takahashi_thiessen.txt 13 ' str(i) ' 0 1 out_' str(i) ' 0 outgridouta2 outgridoutb')
myBat.close()
subprocess.call('C:UsersWahid HussainzadaDesktopTakahashi_2018_9_testwahid.bat')
else:
print("Other txt files than rain files")
Комментарии:
1. См. Документацию для
subprocess.run
( docs.python.org/3/library /… ). Если вы укажетеshell=True
, команда будет запущена с помощью оболочки. Но вы должны быть осведомлены о соображениях безопасности, если вы укажете shell=True ( docs.python.org/3/library /… )
Ответ №1:
попробуйте использовать строковые литералы
subprocess.call(r'C:UsersWahid HussainzadaDesktopTakahashi_2018_9_testwahid.bat')
возможно, вам придется сделать что-то вроде
cmd = r'C:WindowsSystem32cmd.exe'
script = r'C:UsersWahid HussainzadaDesktopTakahashi_2018_9_testwahid.bat'
subprocess.call([cmd,script])
Комментарии:
1. Спасибо за ответ. Я использую Spyder для выполнения кодов. Я не вижу процесс выполнения файла .bat в консоли. Не могли бы вы, пожалуйста, помочь мне с этим?
2. Я использовал коды, он не выдает никаких ошибок. Он выполняется в течение длительного времени, и никаких выходных данных не поступает.
Ответ №2:
На основе ответа @Joran Beasley код может работать с небольшими изменениями, как показано ниже:
cmd = r'C:WindowsSystem32cmd.exe'
script = r'Working directory*.bat'
subprocess.call([script,cmd])