Премини към съдържанието
petie1

Търся човек с познания по Питон

Препоръчан отговор


да ми помогне с едни кодове Моля пишете в темата

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

 говори ми в цифри кеш брой и на ръка.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Не ми трябва да ми пише проект а само да обясни нещо айде ще го пиша в темата и ще  я ползвам за обяснения и питане та на въпроса:

process =  subprocess.Popen(['ls /home/$USER'],stdout=subprocess.PIPE,shell=True)
stdout, stderr = process.communicate()

Този Питон код печата съдържанието на домашния каталог като ползва променливата $USER на средата  BASH... Когата се изведе резултата директно в конзолата (терминала) с 

print stdout

всичко е наред но аз искам да изведа резултата в Listbox и тука вече удрям гредата не  извежда коректно резултата та въпроса е как се извежда резултат от която и да е команда в Listbox? С os.listdir() и обход става идеално но аз искам да е по този начин

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
преди 3 часа, petie1 написа:

как се извежда резултат от която и да е команда в Listbox? 

Например така какво ще излезе ?

# !/usr/bin/python3
from tkinter import *
from tkinter import messagebox
import tkinter
import subprocess

process =  subprocess.Popen(['ls /home/$USER'], stdout=subprocess.PIPE, shell=True)
stdout, stderr = process.communicate()

print(stdout)
print(type(stdout))

decoded_stdout = stdout.decode("utf-8")
print(type(decoded_stdout))

top = Tk()

Lb1 = Listbox(top)
Lb1.insert(1, "Test")
Lb1.insert(2, decoded_stdout)
Lb1.pack()
top.mainloop()

 

 

  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

може да не е  utf 8 


Сподели този отговор


Линк към този отговор
Сподели в други сайтове

ха стига бе верно ли така се добавя?:shock11:

не става пак има някакви странни символи между папките

 

ето моя код

root = Tk()

frm = Frame(root)

frm.pack()

ll = Listbox(frm, height = 100, width = 100 , bg ="white")
ll.pack(side = TOP)

process =  subprocess.Popen(['ls /home/$USER'],stdout=subprocess.PIPE,shell=True)
stdout, stderr = process.communicate()
decolde = stdout.decode("utf-8")

ll.insert(END,decolde)

трябва да стане като с

path=os.listdir("/home/$USER")

for files in path:
ll.insert(END,files)

 

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

В моята система не виждам някакви проблеми като изпълня това:


#!/usr/bin/python2
from Tkinter import Tk
from Tkinter import *
import subprocess
import locale

process = subprocess.Popen(['ls /home/$USER'], stdout=subprocess.PIPE, shell=True)

stdout, stderr = process.communicate()

encoding = locale.getpreferredencoding()
lines = stdout.decode(encoding).splitlines()

top = Tk()
Lb1 = Listbox(top, height = 100, width = 100)

for files in lines:
    Lb1.insert(END, files)

Lb1.pack()
top.mainloop()
 

 

listboxtest.png.498ea1d5cc4fd84521fd5150645724bc.png

  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Ще го тествам и ще пиша явно нещо от локала на Дебиан 8 е

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

И при мен работи последното

Ето още един пример с python3

# !/usr/bin/env python3
from tkinter import *
from subprocess import check_output
from locale import getpreferredencoding

enc = getpreferredencoding()
out = check_output('ls /home/$USER', shell=True).decode(enc).splitlines()

top = Tk()

Lb1 = Listbox(top)
for line in out:
    Lb1.insert(0, line)

Lb1.pack()
top.mainloop()

Между другото има променлива $HOME и може да се използва вместо /home/$USER

Редактирано от Пилешки мечти
decoding (преглед на промените)
  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Стана значи е било от декодирането хм никъде не пише такива неща за Listbox

Пак ще пиша ако забия

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Ето че пак забих ..... Сега пък как се връща в предишен каталог? Вградените функции не вършат работа щот вадят каталога където е скрипта

Ето кода

def back_dir(sel):
    
    sel = ll.get(ll.curselection())
    p = subprocess.Popen(["cd /home/$USER/"+str(sel)+" && cd .."+ "&& ls"],stdout = subprocess.PIPE,shell = True)
    stdout , stderr = p.communicate()
    encode = locale.getpreferredencoding()
    lines = stdout.decode(encode).splitlines()
    
    ta=os.getcwdu()
    ll.delete(0,END)
    ll.insert(0,"/")
    
    for files in lines:
        print files

 

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Не мога да придобия представа от една функция само какво се опитваш да направиш,
обаче в края изтрива списъка и показва наклонена черта на негово място.

Цикъла след това трябва да го направиш да вкара списък с новите файлове.

for files in lines:
	ll.insert(0, files)

Но все пак не виждам каква е целта.

Може би ще е по-добре да обхождаш директориите с вградени методи като  os.getcwdu() или os.listdir() или os.chdir(), а не с шел команди.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
преди 12 часа, Пилешки мечти написа:

Не мога да придобия представа от една функция само какво се опитваш да направиш,
обаче в края изтрива списъка и показва наклонена черта на негово място.

Цикъла след това трябва да го направиш да вкара списък с новите файлове.


for files in lines:
	ll.insert(0, files)

Но все пак не виждам каква е целта.

Може би ще е по-добре да обхождаш директориите с вградени методи като  os.getcwdu() или os.listdir() или os.chdir(), а не с шел команди.

Опитвам се да направя нещо като фтп клиент до сега съм стигнал до листването на файлове от локалната машина а сега се мъча да се връща обратно разбираш ли

А ако ти пратя целия питон скрипт

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
#!/usr/bin/env python2
# -*- coding: utf-8 -*-

from Tkinter import *
import os

# Смени директорията
def change(event):
    s = listbox.get(listbox.curselection())
    # Премахни или добави папки към home списъка
    if s == '/':
        home.pop()
    else:
        home.append(s)
    # Направи списъка home валиден път
    full_path = '/'.join(home[0:])
    # Изтрий показаните папки от предишната директория
    listbox.delete(0, END)
    # Не показвай черта за връщане, ако си в началната директория
    if len(home) > 1:
        listbox.insert(0, '/')
    # Покажи имената от новия път
    for dir in os.listdir(full_path):
        listbox.insert(END, dir)

master = Tk()

listbox = Listbox(master)

# Списък, към ккойто ще се добавят и вадят имена на папки
home = [os.getenv('HOME')]

for dir in os.listdir(home[0]):
    listbox.insert(END, dir)

listbox.bind("<Double-Button-1>", change)
listbox.pack()

mainloop()

Ето как бих го направил аз. Това навигира назад-напред в папките от домашната директория.

Създава един списък, към който добавя имената на файловете при двоен клик върху тях. А като кликнеш върху наклонената черта, те връща едно ниво назад.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
преди 6 минути, Пилешки мечти написа:

#!/usr/bin/env python2
# -*- coding: utf-8 -*-

from Tkinter import *
import os

# Смени директорията
def change(event):
    s = listbox.get(listbox.curselection())
    # Премахни или добави папки към home списъка
    if s == '/':
        home.pop()
    else:
        home.append(s)
    # Направи списъка home валиден път
    full_path = '/'.join(home[0:])
    # Изтрий показаните папки от предишната директория
    listbox.delete(0, END)
    # Не показвай черта за връщане, ако си в началната директория
    if len(home) > 1:
        listbox.insert(0, '/')
    # Покажи имената от новия път
    for dir in os.listdir(full_path):
        listbox.insert(END, dir)

master = Tk()

listbox = Listbox(master)

# Списък, към ккойто ще се добавят и вадят имена на папки
home = [os.getenv('HOME')]

for dir in os.listdir(home[0]):
    listbox.insert(END, dir)

listbox.bind("<Double-Button-1>", change)
listbox.pack()

mainloop()

Ето как бих го направил аз. Това навигира назад-напред в папките от домашната директория.

Създава един списък, към който добавя имената на файловете при двоен клик върху тях. А като кликнеш върху наклонената черта, те връща едно ниво назад.

Ето това е значи не става  с баш така ли? Утре ще ти пратя моя Питон файл , аз повечето работи сам си писах

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
преди 1 минута, petie1 написа:

Ето това е значи не става става с баш така ли?

Сигурен съм че може и с шел команди, но не се сещам за лесен начин.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
преди 3 минути, Пилешки мечти написа:

Сигурен съм че може и с шел команди, но не се сещам за лесен начин.

Като го видиш не ми се смей много де

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Регистрирайте се или влезете в профила си за да коментирате

Трябва да имате регистрация за да може да коментирате това

Регистрирайте се

Създайте нова регистрация в нашия форум. Лесно е!

Нова регистрация

Вход

Имате регистрация? Влезте от тук.

Вход

×

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия за ползване.