Форум сайта python.su
Есть программа, которая работает через командную строку.
Запуск программы –> C:\Windows\System32\cmd.exe /k fdsinit
После этого появляется какое-то “специальное” окно командной строки
Цель: из питона запустить программу, перейти в нужную директорию (или сразу открыть в нужной директории), ввести команду на обработку файла.
я могу открыть прогу через такой код
import subprocess subprocess.run('C:\Windows\System32\cmd.exe /k fdsinit', shell=True)
Офлайн
Получится ли как к примеру я блокноту скармливаю файл с помощью os
import os os.system('notepad.exe D:\my_doc.txt')
Офлайн
xam1816Делаю аналогичный пример - не работает
import os
os.system('notepad.exe D:\my_doc.txt')
import os os.system('C:\Windows\System32\cmd.exe /k fdsinit cd..')
import os os.system('cmd.exe /k cd..')
Отредактировано Pacifist (Окт. 18, 2021 10:34:41)
Офлайн
d:\temp>test2.cmd www
"программа запущена с аргументом: www"
Введите пароль: 123
"пароль: 123"
d:\temp>echo qwerty | test2.cmd www
"программа запущена с аргументом: www"
Введите пароль: "пароль: qwerty "
d:\temp>
@echo off
echo "программа запущена с аргументом: %1"
set /P var="Введите пароль: "
echo "пароль: %var%"
Pacifistчто мешает сразу перейти в нужную директорию перед вызовом программы?
через какие аргументы можно выполнить сразу три действия (открыть прогу, перейти в нужную директорию, запустить команду)?
d:\temp>test2.cmd
current dir: d:\temp
d:\temp>cd ..
d:\>temp\test2.cmd
current dir: d:\
d:\>cd test
d:\test>d:\temp\test2.cmd
current dir: d:\test
d:\test>
@echo off
echo current dir: %cd%
[code python][/code]
Отредактировано PEHDOM (Окт. 18, 2021 11:17:15)
Офлайн
PacifistЯ предполагал не открывать cmd.exe, а сразу типа
Делаю аналогичный пример - не работает
os.system('D:\fds.exe D:\файл.fds')
Отредактировано xam1816 (Окт. 18, 2021 12:12:44)
Офлайн
PEHDOMСпасибо за развернутый ответ. Пока не смог понять как мне это использовать
xam1816Для начала работы именно нужно запустить cmd.exe через fdsinit.bat
Я предполагал не открывать cmd.exe, а сразу типа
Офлайн
Pacifistтак fdsinit этобатник?вот это я туплю, вот что значит 4 дня выходных . Так шож вы бабушку лохматите то? его же можно как угодно поправить, батник в студию, будм смотреть .
Для начала работы именно нужно запустить cmd.exe через fdsinit.bat
Pacifistв первом случае батник спрашивает ввод с клавиатуры, первый пример мы вводим, второй - через перенаправление echo qwerty | test2.cmd www просто подставляем из командной строки пароль qwerty, ничего не вводя с клавы.
Спасибо за развернутый ответ. Пока не смог понять как мне это использовать
[code python][/code]
Отредактировано PEHDOM (Окт. 18, 2021 16:35:34)
Офлайн
import os from subprocess import Popen, PIPE # changes directory to directory where input file is saved. base = (os.getcwd()) string = f"{base}/4" os.chdir(string) cmd = 'cmd.exe' p = Popen(cmd, stdin=PIPE , stdout=PIPE, bufsize=0, shell=True) p.stdin.write(b"fdsinit*desired folder name*") p.stdin.write(b"fds_local -p 2 -o 2 *filename*.fds ") p.stdin.close() p.wait();
Офлайн
PEHDOMfdsinit.bat:
так fdsinit этобатник?вот это я туплю, вот что значит 4 дня выходных . Так шож вы бабушку лохматите то? его же можно как угодно поправить, батник в студию, будм смотреть .
@echo off set I_MPI_ROOT=%~dp0\mpi set PATH=%I_MPI_ROOT%;%PATH% set IN_CMDFDS=1 set MPIEXEC_PORT_RANGE= set MPICH_PORT_RANGE= title FDS echo. echo type helpfds for help on running fds
xam1816пример как раз для меня) спасибо! Именно эту команду мне нужно запустить, отредактировав индексы и имя файла в питоне.
fds_local -p 2 -o 2 *filename*.fds
Офлайн
Pacifistзачем? ставите условие если нет аргументов то просто батник работает как есть, если есть аргумент парсите его
чего-то не хочется в него лезть
потом придется постоянно динамически менять?
if "%1"=="" (
echo нормальная работа, запрашиваем команды и т.д...
) else (
echo автоматическая работа, вызываем fds.exe c параметрами передаными в команной строке
)
[code python][/code]
Отредактировано PEHDOM (Окт. 18, 2021 17:16:28)
Офлайн