горе python3 с передачей строки в стандартный поток подпроцесса - PullRequest
0 голосов
/ 05 декабря 2018

Как мне заставить эту команду unix ... работать в python3?

команда unix

echo 'alter table in db' | zenity --text-info --width 600 --height 300 --title 'has this sql been done?'

Приведенная выше команда выскакивает окно с текстом, и я могу затем захватитьответ пользователя.

В python3 я думал, что могу просто написать это в стандартный поток подпроцесса, но у меня продолжают появляться загадочные ошибки, которые я не могу обойти

ниже - программа на pythonэтот

#!/usr/bin/env python3
import subprocess

cmd = ['zenity', '--text-info', '--width', 600, '--height', 300, '--title', 'has this sql been done?']

pipe = subprocess.Popen(cmd, stdout=subprocess.PIPE, stdin=subprocess.PIPE,  stderr=subprocess.STDOUT)

data='alter table in db'

resp = pipe.communicate(input=data)[0]

этот скрипт на питоне, однако, не работает с

Traceback (most recent call last):
    pipe = subprocess.Popen(cmd, stdout=subprocess.PIPE, stdin=subprocess.PIPE,  stderr=subprocess.STDOUT)
  File "/usr/lib/python3.6/subprocess.py", line 709, in __init__
    restore_signals, start_new_session)
  File "/usr/lib/python3.6/subprocess.py", line 1275, in _execute_child
    restore_signals, start_new_session, preexec_fn)
TypeError: expected str, bytes or os.PathLike object, not int

любые идеи будут высоко оценены

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

! / Usr / bin / env python3

подпроцесс импорта

cmd = ['zenity', '--text-info', '--width', '600','--height', '300', '--title', 'был ли выполнен этот sql?']

pipe = subprocess.Popen (cmd, stdout = subprocess.PIPE, stdin = subprocess.PIPE, stderr = subprocess.STDOUT)

data = 'изменить таблицу в дБ'

resp = pipe.communicate (input = bytearray (data, 'utf-8')) [0]

0 голосов
/ 05 декабря 2018

Это:

cmd = ['zenity', '--text-info', '--width', 600, '--height', 300, '--title', 'has this sql been done?']

должно быть так:

cmd = ['zenity', '--text-info', '--width', '600', '--height', '300', '--title', 'has this sql been done?']

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

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