Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
Это может быть сделано. С 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]
Существует также модуль команд:
import commands
status, output = commands.getstatusoutput("gvimdiff <(hg cat file.txt) file.txt")
Существует также popen набор функций, если Вы хотите на самом деле grok данные из команды, когда это работает.
Это - на самом деле пример в документах:
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.
Это просто рассветало на мне, что Вы, вероятно, ищете одну из функций popen.
от: http://docs.python.org/lib/module-popen2.html
popen3 (cmd [bufsize [режим]]) Выполняет cmd как подпроцесс. Возвращает объекты файла (child_stdout, child_stdin, child_stderr).
намасте, Mark