Как получить сценарий python для запуска командной оболочки в Windows (10), где она открывается в месте, указанном программой c? - PullRequest
0 голосов
/ 10 апреля 2020

Мне нужно запускать команды в командной строке, но они работают только тогда, когда командная строка установлена ​​в определенном месте в системе. Мне нужно выполнить следующие команды в сценарии python:

import os
os.system("set OMP_NUM_THREADS=2")
os.system("explorer.exe /e,::{20D04FE0-3AEA-1069-A2D8-08002B30309D}"@
os.system("cd C:\CFD\crit_vel_01_02")
os.system("mpiexec  -n  9 FDS  crit_vel_01_02.fds")
os.system("PAUSE") 

система не распознает команду

os.system("mpiexec  -n  9 FDS  crit_vel_01_02.fds")

, если она не запущена в установленной командной оболочке по установке программы "fds", которая является симулятором пожарной динамики. Я понимаю, что это выглядит довольно специфично c для программы, но я предполагаю, что есть какой-то общий c способ, которым python может запускать командную оболочку из другого места / с другими настройками.

Ярлык для командная строка называется CMDfds и устанавливается в:

"C: \ ProgramData \ Microsoft \ Windows \ Start Menu \ Programs \ FDS6"

в свойствах цели в ярлыке Вкладка:

"C: \ Windows \ System32 \ cmd.exe / k fdsinit"

Ответы [ 2 ]

0 голосов
/ 10 апреля 2020

Проблема с запуском программ с системными командами заключается в том, что они часто имеют другую среду оболочки. Чтобы избежать проблем, возникающих из-за этого, рекомендуется использовать абсолютные пути. В вашем случае:

os.system("mpiexec  -n  9 FDS  crit_vel_01_02.fds")

следует изменить на:

os.system("/absolute/path/to/mpiexec  -n  9 FDS  crit_vel_01_02.fds")
0 голосов
/ 10 апреля 2020

Не уверен, что это сработает, но вы можете попробовать subprocess.run с shell=True.

Если shell равен True, указанная команда будет выполнена через оболочку. Это может быть полезно, если вы используете Python в основном для расширенного потока управления, который он предлагает для большинства системных оболочек, и все еще хотите иметь удобный доступ к другим функциям оболочки, таким как каналы оболочки, подстановочные знаки имени файла, расширение переменной среды и расширение ~ до домашний каталог пользователя.

Также попробуйте запустить скрипт python из командной оболочки fds. Похоже, что инициализация вещи в оболочке.

...