Ошибка разрыва канала Dpkg при использовании os.popen в Python [closed]

Я экспериментирую с Gtk + 3 и создаю программу, которая получает результат выполнения команды dpkg --get-selections и отображает это в Gtk + 3 TextView .

Когда я запускаю свою программу, я получаю следующую ошибку:

Traceback (most recent call last):
  File "file1.py", line 36, in <module>
    window = dpkgApp()
  File "file1.py", line 24, in __init__
    with open("", "w") as f:
IOError: [Errno 2] No such file or directory: ''
dpkg: error: error writing to '<standard output>': Broken pipe

Это мой код:

#!/usr/bin/python

import io, subprocess, os
from gi.repository import Gtk

class dpkgApp(Gtk.Window):
    def __init__(self):

        Gtk.Window.__init__(self, title="Software/dependencies")

        self.table = Gtk.Table(3, 3, True)
        self.add(self.table)

        self.scrollWindow = Gtk.ScrolledWindow()
        self.table.attach(self.scrollWindow, 0, 1, 0, 1)

        self.textView = Gtk.TextView()
        self.scrollWindow.add(self.textView)

#######################################################################
        subprocess.call("dpkg --get-selections", shell=True)
        dpkg_output = os.popen("dpkg --get-selections")

        with open("", "w") as f:
            f.writeline(dpkg_output)
            f.close()

        buffer = Gtk.TextBuffer()
        self.textView.get_buffer(buffer)
        self.textView.set_editable(False)
        self.textView.set_wrap_mode(True)
        self.textView.set_cursor_visible(False)

        buffer.set_text(dpkg_output)

window = dpkgApp()
window.connect("delete-event", Gtk.main_quit)
window.show_all()
Gtk.main()

При просмотре StackOverflow кажется, что это проблема с подпроцессом , но Я использую модуль os для получения вывода команды dpkg , а вывод ошибки включает dpkg: error: , так что, возможно, это dpkg ошибка?

Я попытался заменить строку os.popen на os.Popen (["dpkg --get-selections"], stdout = PIPE) и добавление из подпроцесса импорта Popen, PIPE , но я просто получаю сообщение об ошибке:

AttributeError: 'module' object has no attribute 'Popen'

Есть идеи?

0
задан 29 November 2015 в 00:17

1 ответ

dpkg --get-selections вызов работает хорошо; проблема находится в следующей строке 24, где Вы пытаетесь открыть файл с пустым именем файла:

with open("", "w") as f:

Пустые имена файлов не позволяются. Используйте "реальное" имя файла, или временный файл Вас не хочет заботиться об именах и местоположении:

import tempfile
with tempfile.TemporaryFile() as f:

, Кроме того, file не имеет никакой функции writeline, Вы, вероятно, ищете writelines.

f.writelines(dpkg_output)
2
ответ дан 26 July 2019 в 13:55

Другие вопросы по тегам:

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