LINUX.ORG.RU

Попробуйте так:

call([r"path to file"])
Deleted
()
Ответ на: комментарий от fang90

Путь до файла определяется программно при выборе пользователем файла. Этот файл может лежать где угодно, и директорий с такими именами (с пробелом) в адресе до файла может быть сколь угодно.и поэтому я не могу вставлять пробел. И вот как быть??

cdi1989
() автор топика

Не нужно ничего для popen экранировать, наркоманов можешь не слушать. Из терминал скрипт по этому пути запускается?

anonymous
()
Ответ на: комментарий от anonymous

Разумеется, нужно, аргумент к popen() передаётся шеллу.

ТС, юзай двойные кавычки вокруг пути запускаемого файла (и предварительно заменяй двойные кавычки внутри самого пути на \").

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от anonymous

Нет, не запускается. Пишет ошибку, вот -

fileName::stripInvalid() called for invalid fileName /home/kalina/Рабочийстол/Тестовый_пример

Он зараза, объединяет Рабочийстол и все. В любом случае объединяет, так как нсть пробел

cdi1989
() автор топика
Ответ на: комментарий от intelfx

И с двойными кавычками все равно объединяет слова

cdi1989
() автор топика
Ответ на: комментарий от cdi1989
fdi = "/home/kalina/Рабочий стол/Тестовый_пример"
proc = subprocess.Popen(["bash /*/*/OpenFOAM/SOLVER_BASH"], cwd = fdi, shell = True, stdout=file, stderr=file)
cdi1989
() автор топика
Ответ на: комментарий от cdi1989

Он должен перейти в каталог fdi, а вместо этого объединяет Рабочийстол и пишет, что такого файла нет((( естественно его нет. какого фига объединять, я ведь явно указал полный путь???

cdi1989
() автор топика
Ответ на: комментарий от cdi1989

А зачем ты запускаешь шелл, и тем более два раза? Убедись что в SOLVER_BASH прописан shebang и пробуй:

import glob
proc = subprocess.Popen(glob.glob('/*/*/OpenFOAM/SOLVER_BASH')[0]), cwd = fdi, stdout=file, stderr=file)

anonymous
()
Ответ на: комментарий от anonymous

Или можно:

proc = subprocess.Popen(["bash", "/*/*/OpenFOAM/SOLVER_BASH"], cwd = fdi, stdout=file, stderr=file)

proud_anon ★★★★★
()
Ответ на: комментарий от cdi1989

Если ты хочешь правильно обрабатывать сложные случаи (как, например, пробелы и кавычки в аргументах), не делай shell=True. В этом случае делается так: в первый аргумент subprocess.Popen засовывается массив строк, первая — путь к исполняемому файлу, а каждая следующая — его аргументы. В твоем случае это выглядело бы как-то так:

proc = subprocess.Popen(["/bin/bash", "/*/*/OpenFOAM/SOLVER_BASH"], cwd = fdi, stdout=file, stderr=file)

Я не уверен насчет cwd и пути с пробелом, но это не должно быть проблемой, т. к. передается отдельной строкой. Вероятно, ошибка где-то у тебя в коде.

Kiborg ★★★
()

школота, какого хрена оно делает на рабочем столе? Другого места придумать не можешь? Сам себе проблему выдумал.

targitaj ★★★★★
()
Ответ на: комментарий от Kiborg

Я лишь намекаю, что хардкодить пути не лучшая практика.

loz ★★★★★
()
Ответ на: комментарий от loz

:D самое смешное, что я видел на лоре в этом году.

cdshines ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.