Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 17, 2021 23:04:05

Pacifist
Зарегистрирован: 2020-01-10
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

питон + cmd с аргументами

Есть программа, которая работает через командную строку.
Запуск программы –> C:\Windows\System32\cmd.exe /k fdsinit
После этого появляется какое-то “специальное” окно командной строки
Цель: из питона запустить программу, перейти в нужную директорию (или сразу открыть в нужной директории), ввести команду на обработку файла.
я могу открыть прогу через такой код

 import subprocess
subprocess.run('C:\Windows\System32\cmd.exe /k fdsinit', shell=True)
через какие аргументы можно выполнить сразу три действия (открыть прогу, перейти в нужную директорию, запустить команду)?

Офлайн

#2 Окт. 17, 2021 23:23:18

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 579
Репутация: +  58  -
Профиль   Отправить e-mail  

питон + cmd с аргументами

Получится ли как к примеру я блокноту скармливаю файл с помощью os

 import os
os.system('notepad.exe D:\my_doc.txt')

Офлайн

#3 Окт. 18, 2021 10:31:51

Pacifist
Зарегистрирован: 2020-01-10
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

питон + cmd с аргументами

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..')

Отредактировано Pacifist (Окт. 18, 2021 10:34:41)

Офлайн

#4 Окт. 18, 2021 11:07:26

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2178
Репутация: +  293  -
Профиль   Отправить e-mail  

питон + cmd с аргументами

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%



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Окт. 18, 2021 11:17:15)

Офлайн

#5 Окт. 18, 2021 12:12:25

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 579
Репутация: +  58  -
Профиль   Отправить e-mail  

питон + cmd с аргументами

Pacifist
Делаю аналогичный пример - не работает
Я предполагал не открывать cmd.exe, а сразу типа
 os.system('D:\fds.exe D:\файл.fds')

Отредактировано xam1816 (Окт. 18, 2021 12:12:44)

Офлайн

#6 Окт. 18, 2021 15:47:50

Pacifist
Зарегистрирован: 2020-01-10
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

питон + cmd с аргументами

PEHDOM
Спасибо за развернутый ответ. Пока не смог понять как мне это использовать

xam1816
Я предполагал не открывать cmd.exe, а сразу типа
Для начала работы именно нужно запустить cmd.exe через fdsinit.bat
Потом перейти в нужную директорию (или сразу в ней запустить)
Потом команда с именем фала

Офлайн

#7 Окт. 18, 2021 16:25:02

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2178
Репутация: +  293  -
Профиль   Отправить e-mail  

питон + cmd с аргументами

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

нафига вы вообще дергаете C:\Windows\System32\cmd.exe? почему не вызвать сразу батник?



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Окт. 18, 2021 16:35:34)

Офлайн

#8 Окт. 18, 2021 16:34:47

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 579
Репутация: +  58  -
Профиль   Отправить e-mail  

питон + cmd с аргументами

 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();

в интернете нашел

Офлайн

#9 Окт. 18, 2021 16:55:43

Pacifist
Зарегистрирован: 2020-01-10
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

питон + cmd с аргументами

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
пример как раз для меня) спасибо! Именно эту команду мне нужно запустить, отредактировав индексы и имя файла в питоне.
Буду пробовать

Офлайн

#10 Окт. 18, 2021 17:15:35

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2178
Репутация: +  293  -
Профиль   Отправить e-mail  

питон + cmd с аргументами

Pacifist
чего-то не хочется в него лезть
потом придется постоянно динамически менять?
зачем? ставите условие если нет аргументов то просто батник работает как есть, если есть аргумент парсите его
типа
if "%1"=="" (
echo нормальная работа, запрашиваем команды и т.д...
) else (
echo автоматическая работа, вызываем fds.exe c параметрами передаными в команной строке
)



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Окт. 18, 2021 17:16:28)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version