Команда перенаправления к входу другого в Python

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

7
задан alif 16 September 2008 в 23:46
поделиться

4 ответа

Это может быть сделано. С Python 2.5, однако, этот механизм является определенным для Linux и не портативным:

import subprocess
import sys

file = sys.argv[1]
p1 = subprocess.Popen(['hg', 'cat', file], stdout=subprocess.PIPE)
p2 = subprocess.Popen([
    'gvimdiff',
    '/proc/self/fd/%s' % p1.stdout.fileno(),
    file])
p2.wait()

Тем не менее в конкретном случае разности, можно просто взять один из файлов от stdin и устранить необходимость использовать рассматриваемую функциональность удара одинаково:

file = sys.argv[1]
p1 = subprocess.Popen(['hg', 'cat', file], stdout=subprocess.PIPE)
p2 = subprocess.Popen(['diff', '-', file], stdin=p1.stdout)
diff_text = p2.communicate()[0]
9
ответ дан 6 December 2019 в 21:22
поделиться

Существует также модуль команд:

import commands

status, output = commands.getstatusoutput("gvimdiff <(hg cat file.txt) file.txt")

Существует также popen набор функций, если Вы хотите на самом деле grok данные из команды, когда это работает.

2
ответ дан 6 December 2019 в 21:22
поделиться

Это - на самом деле пример в документах:

p1 = Popen(["dmesg"], stdout=PIPE)
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
output = p2.communicate()[0]

что означает для Вас:

import subprocess
import sys

file = sys.argv[1]
p1 = Popen(["hg", "cat", file], stdout=PIPE)
p2 = Popen(["gvimdiff", "file.txt"], stdin=p1.stdout, stdout=PIPE)
output = p2.communicate()[0]

Это удаляет использование определенных для Linux/proc/self/fd битов, заставляя его, вероятно, работать над другими нельдами как Солярис и BSDs (включая MacOS) и возможно даже работать над Windows.

2
ответ дан 6 December 2019 в 21:22
поделиться

Это просто рассветало на мне, что Вы, вероятно, ищете одну из функций popen.

от: http://docs.python.org/lib/module-popen2.html

popen3 (cmd [bufsize [режим]]) Выполняет cmd как подпроцесс. Возвращает объекты файла (child_stdout, child_stdin, child_stderr).

намасте, Mark

-1
ответ дан 6 December 2019 в 21:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: