Найти - Пользователи
Полная версия: питон + cmd с аргументами
Начало » Python для новичков » питон + cmd с аргументами
1 2
Pacifist
Есть программа, которая работает через командную строку.
Запуск программы –> C:\Windows\System32\cmd.exe /k fdsinit
После этого появляется какое-то “специальное” окно командной строки
Цель: из питона запустить программу, перейти в нужную директорию (или сразу открыть в нужной директории), ввести команду на обработку файла.
я могу открыть прогу через такой код
 import subprocess
subprocess.run('C:\Windows\System32\cmd.exe /k fdsinit', shell=True)
через какие аргументы можно выполнить сразу три действия (открыть прогу, перейти в нужную директорию, запустить команду)?
xam1816
Получится ли как к примеру я блокноту скармливаю файл с помощью os
 import os
os.system('notepad.exe D:\my_doc.txt')
Pacifist
xam1816
import os
os.system('notepad.exe D:\my_doc.txt')
Делаю аналогичный пример - не работает
 import os
os.system('C:\Windows\System32\cmd.exe /k fdsinit cd..')

работает такой пример, с аргументом /k, но с двумя /k уже не работает:
 import os
os.system('cmd.exe /k cd..')
PEHDOM
d:\temp>test2.cmd www
"программа запущена с аргументом: www"
Введите пароль: 123
"пароль: 123"

d:\temp>echo qwerty | test2.cmd www
"программа запущена с аргументом: www"
Введите пароль: "пароль: qwerty "

d:\temp>
test2.cmd:
@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>
test2.cmd:
@echo off
echo current dir: %cd%
xam1816
Pacifist
Делаю аналогичный пример - не работает
Я предполагал не открывать cmd.exe, а сразу типа
 os.system('D:\fds.exe D:\файл.fds')
Pacifist
PEHDOM
Спасибо за развернутый ответ. Пока не смог понять как мне это использовать

xam1816
Я предполагал не открывать cmd.exe, а сразу типа
Для начала работы именно нужно запустить cmd.exe через fdsinit.bat
Потом перейти в нужную директорию (или сразу в ней запустить)
Потом команда с именем фала
PEHDOM
Pacifist
Для начала работы именно нужно запустить cmd.exe через fdsinit.bat
так fdsinit этобатник?вот это я туплю, вот что значит 4 дня выходных . Так шож вы бабушку лохматите то? его же можно как угодно поправить, батник в студию, будм смотреть .
Pacifist
Спасибо за развернутый ответ. Пока не смог понять как мне это использовать
в первом случае батник спрашивает ввод с клавиатуры, первый пример мы вводим, второй - через перенаправление echo qwerty | test2.cmd www просто подставляем из командной строки пароль qwerty, ничего не вводя с клавы.
Во втором случае сначала меняем текущую директорию, потом вызываем батник, батник считает текущей не ту директорию в которой находиться, а ту из которой запущен.

нафига вы вообще дергаете C:\Windows\System32\cmd.exe? почему не вызвать сразу батник?
xam1816
 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();

в интернете нашел
Pacifist
PEHDOM
так fdsinit этобатник?вот это я туплю, вот что значит 4 дня выходных . Так шож вы бабушку лохматите то? его же можно как угодно поправить, батник в студию, будм смотреть .
fdsinit.bat:
 @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
пример как раз для меня) спасибо! Именно эту команду мне нужно запустить, отредактировав индексы и имя файла в питоне.
Буду пробовать
PEHDOM
Pacifist
чего-то не хочется в него лезть
потом придется постоянно динамически менять?
зачем? ставите условие если нет аргументов то просто батник работает как есть, если есть аргумент парсите его
типа
if "%1"=="" (
echo нормальная работа, запрашиваем команды и т.д...
) else (
echo автоматическая работа, вызываем fds.exe c параметрами передаными в команной строке
)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB