Выполнение пакета xmgrace с помощью subprocess.Popen () - PullRequest
1 голос
/ 26 июля 2011

Я должен сделать графики из нескольких файлов с данными. Я уже нашел способ запустить простую команду

xmgrace -batch batch.bfile -nosafe -hardcopy

, в котором batch.bfile представляет собой текстовый файл с командами изящества для печати нужного мне графика. Я уже попробовал это вручную, и он отлично работает. Чтобы сделать это с несколькими файлами, мне просто нужно отредактировать один параметр внутри batch.bfile и запускать одну и ту же команду каждый раз, когда я делаю изменения.

Я уже написал код на python, который редактирует файл batch.bfile и просматривает все файлы данных с циклом for. На каждом шаге цикла я хочу выполнить указанную команду непосредственно в командной строке.

После небольшого поиска я нашел два решения, одно с os.system () и другое с subprocess.Popen (), и я мог только заставить subprocess.Popen () работать без ошибок, написав:

subprocess.Popen("xmgrace -batch batch.bfile -nosafe -hardcopy", shell=True)

Проблема в том, что на практике это ничего не делает, т. Е. Это просто не то же самое, что запуск команды непосредственно в командной строке. Я уже пытался написать полный каталог для batch.bfile, но ничего не изменилось.

Я использую Python 2.7 и Mac OS 10.7

Ответы [ 3 ]

0 голосов
/ 26 июля 2011

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

from subprocess import Popen, PIPE
ps = Popen(reportParameters,bufsize=512, stdout = PIPE, stderr = PIPE)
if ps:
   while 1:
      stdout = ps.stdout.readline()
      stderr = ps.stderr.readline()
      exitcode = ps.poll()
      if (not stdout and not stderr) and (exitcode is not None):
         break
      if stdout:
         stdout = stdout[:-1]
         print stdout
      if stderr:
         stderr = stderr[:-1]
         print stderr
0 голосов
/ 27 июля 2011

Вы проверили запуск xmgrace из командной строки, используя sh?(то есть вызовите / bin / sh, затем запустите xmgrace ... которая должна быть той же самой оболочкой, которую использует Popen, когда вы устанавливаете shell = true).

Другим решением будет создание сценария оболочки (создайтефайл, как myscript.sh, и запустить chmod + x из терминала).В скрипте вызовите xmgrace:

#!/bin/bash
xmgrace -batch batch.bfile -nosafe -hardcopy

Затем вы можете проверить, что работает myscript.sh, который должен подобрать любые переменные окружения, которые могут быть в вашем профиле, которые могут отличаться от python.Если это работает, вы можете вызвать скрипт из подпроцесса python.Popen ('myscript.sh').Вы можете проверить, какие переменные среды установлены в python для подпроцесса, выполнив:

import os
os.environ
0 голосов
/ 26 июля 2011

Вы можете проверить http://sourceforge.net/projects/graceplot/

...