LINUX.ORG.RU

Как сделать консоль скрытой

 


1

3

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

proc = subprocess.Popen("konsole -workdir " + full_dir + " -e bash /*/*/OpenFOAM/QW", shell=True)
Ответ на: комментарий от i_gnatenko_brain

в ней запускается процесс длиной в пару минут. она нужна, но нужно, чтобы перед глазами она не висела, а находилась внизу скрытой

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

в ней запускается процесс длиной в пару минут. она нужна, но нужно, чтобы перед глазами она не висела, а находилась внизу скрытой

почему нельзя тогда просто в бекграунде процесс запустить и дождаться завершения, без всяких консолей?

по теме, спрятать окно можно с помощью wmctrl какого-нибудь как вариант.

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

А как его вызвать напрямую?? у меня только такой вариант получилось сделать, как в первом сообщении

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

так я так и вызываю. а дальше как? какие аргументы внутри? мне нужно, чтобы было так: 1) переход в директорию «full_dir» 2) выполнение bash-сценария из файла QW

«konsole -workdir » + full_dir + " -e bash /*/*/OpenFOAM/QW"

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

а можно применительно к моей команде все то же самое: proc = subprocess.Popen(«konsole -workdir » + full_dir + " -e bash /*/*/OpenFOAM/QW", shell=True)

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

file - это дескриптор файла, его надо сначала открыть...

короче, man python

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

никак(( в фоновом режиме не получается запустить. Всегда консоль открывается на переднем плане

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

А тебе вообще консоль нужна? Если у тебя там скрипт какой-то, то не проще его выполнить не в консоли, а «как есть»? Ты бы написал что ты хочешь получить в итоге, полную картину, может тебе что простое бы посоветовали.

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

Попробую объяснить. Вручную это работает так: 1) открываю терминал 2) ввожу команду перехода в директорию с примером, для которого нужно запустить вычисления. 3) ввожу команду запуска вычисления «rhoCentralFoam»

Теперь нужно это все программно сделать без «ручных действий». И вот как я это реализовал:

proc = subprocess.Popen(«konsole -workdir » + full_dir + " -e bash /*/*/OpenFOAM/QW", shell=True)

1) команда «konsole» программно запускает консоль 2) "-workdir " + full_dir делает переход в директорию с примером 3) команда " -e bash /*/*/OpenFOAM/QW" запускает на выполнение «sh» сценарий из файла QW. Вот сценарий:

#!/bin/sh . /opt/openfoam231/etc/bashrc rhoCentralFoam exit

И все работает, но КОНСОЛЬ НАДО СПРЯТАТЬ

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

Еще раз. Зачем запускаешь konsole?

proc = subprocess.Popen(['/*/*/OpenFOAM/QW'], shell=True, cwd=full_dir)


А вообще документацию читать не пробовал?
anonymous
()
Ответ на: комментарий от cdi1989

Теперь нужно это все программно сделать без «ручных действий»

Ты сделал это неправильно

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

Почему ты не можешь сделать «cd» в subprocess.Popen и через «&» вызвать свою команду? Вообще почему python, тебе на bash это было бы гораздо понятней.

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

я новичок. можно мне разжевать на моем примере:

proc = subprocess.Popen("konsole -workdir " + full_dir + " -e bash /*/*/OpenFOAM/QW", shell=True)
cdi1989
() автор топика
Ответ на: комментарий от alozovskoy

Большое спасибо. Я все таки решил проблему:

proc1 = subprocess.Popen(["bash /*/*/OpenFOAM/QW"], cwd = full_dir, shell = True, stdout=open('/home/kalina/OpenFOAM/out.log','a'), stderr=open('/home/kalina/OpenFOAM/out.log','a'))
cdi1989
() автор топика
Ответ на: комментарий от cdi1989
proc = subprocess.Popen("cd путьКТвоемуКаталогу ; konsole -workdir " + full_dir + " -e bash /*/*/OpenFOAM/QW", shell=True, stdout=subprocess.PIPI, stderr=subprocess.PIPE)
alozovskoy ★★★★★
()
Ответ на: комментарий от cdi1989

А, ну или так, надо будет перечитать документацию...

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

Теперь все решение идет в фоновом режиме и в логах отражается то, что раньше было в консоли. Вот думаю Progress Bar прикрутить, чтобы видеть как идет процесс)

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

libvte имеет биндинги к питону...
То, что ты написал - ссаное говнище, которое пошлет меня нах - ибо у меня Гайка с XTerm, RHEL с Гномом или Lubuntu с другим термом
Это я так, примеры привел
Но ты должен понять, что нельзя хардкодом запускать софтину опеределенную

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

похоже, товоя проблема была в том, что файл /*/*/OpenFOAM/QW неисполняемый, а надо было сделать его исполняемым, тогда можно bash убрать из команды запуска

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