from subprocess import Popen, PIPE, STDOUT
cmd = 'ls /etc/fstab /etc/non-existent-file'
p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True)
output = p.stdout.read()
print(output)
import sys
from PyQt5 import QtCore, QtWidgets
class NumericItem(QtWidgets.QTableWidgetItem):
""" QTableWidgetItem с перегруженым оператором сравнения """
""" Каждый элемент item имеет набор связанных с ним элементов данных data,
каждый со своей ролью. Роли используются представлением, чтобы указать тип данных. """
def __lt__(self, other):
""" Перегружает оператор сравнения data в QTableWidgetItem """
return (self.data(QtCore.Qt.UserRole) < other.data(QtCore.Qt.UserRole))
app = QtWidgets.QApplication(sys.argv)
tableWidget = QtWidgets.QTableWidget(15,3)
tableWidget.setGeometry(400, 100, 400, 550)
tableWidget.setSortingEnabled(False)
# Заполняем первый столбец как обычно
for i, e in enumerate('ABCDEFGHIJKLMNO'):
item = QtWidgets.QTableWidgetItem(e)
tableWidget.setItem(i, 0, item)
l = ['не знаю', 'абсолютно', 'нет', 'абсолютно', 'не знаю', 'абсолютно', 'да',
'не знаю', 'абсолютно', 'да', 'не знаю', 'нет', 'абсолютно', 'нет', 'да']
def mysortorder(e):
""" каждому слову назначаем вес """
ves = {'абсолютно':3, 'нет':4, 'да':20, 'не знаю':1}
return ves[e]
# Заполняем второй столбец с нашей кастомной сортировкой
for row, val in enumerate(l):
item = NumericItem(val) # Это QTableWidgetItem с перегруженым оператором сравнения
item.setData(QtCore.Qt.UserRole, mysortorder(val)) # В data записываем число - вес
tableWidget.setItem(row, 1, item)
tableWidget.setSortingEnabled(True)
tableWidget.sortItems(0, QtCore.Qt.AscendingOrder)
tableWidget.show()
sys.exit(app.exec_())
Гуглить sqlite tcp server
Вот еще например: https://github.com/HerrOtto/SQLiteServer
но это на сишарпе
Ну и напоследок:
Вотще на сервере логично юзать mysql