• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

JoaoRodrigues

Ajuda com comandos para a bash

15 mensagens neste tópico

Boas pessoal.

Estava aqui a ler uns tutoriais que o PYPT me mandou e deu-me uma ideia para fazer um programazito que me vai dar jeito agora nas férias :)

Estou é com um problema na parte essencial da coisa  :mad:

O script faz um ls de uma pasta definida pelo utilizador e eu queria que cada ficheiro fosse guardado numa lista. O primeiro passo era guardar tudo como um só item da lista e depois eu trabalho a lista para separar os ficheiro um a um (uma vez que o output do ls vem com espaços entre os ficheiros). Como é que eu faço para "guardar" numa variável o resultado do ls? Tenho uma ideia que é imprimir o output para um ficheiro de texto, ler do ficheiro de texto a lista e depois apagar o ficheiro de texto. Mas como isto dá muito trabalho :P

EDIT: Já percebi onde estou a errar mas não sei dar a volta

O código que tenho é este:

filmes = prompt('ls '+x)

Sendo o x a directoria que o utilizador digita. Agora.. se eu fizer print a variavel filmes ele dá-ma em branco. Porquê?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
import os
a = raw_input("directoria a coisar: ")
os.system('ls '+a)

Talvez?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já tenho isso :P Vou por aqui o codigo todo:

import os

prompt = os.system

x = raw_input('Digite o caminho para a pasta dos filmes\n')

prompt('cd '+x)
filmes = prompt('ls '+x)

O meu problema é que o filmes vem em branco :S ou antes, assume valor 0

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

isso é porque o os.system retorna o código de fim do programa (return 0; anyone?). Como resolver isto? Não sei...

EDIT: Só se for:

os.system("ls "+x+" > lolz.txt")

e depois vais buscar o conteúdo do lolz.txt.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

EDIT3: Não sei porque a primeira tentativa não funcionou. Mas depois deu. O teu codigo djthyrax, está a funcionar :P Thanks a lot!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

import os

prompt = os.system

x = raw_input('Digite o caminho para a pasta dos filmes\n')

prompt('cd '+x)
filmes=open('temp.txt', 'w')
prompt("ls "+x+"> "+x+"/temp.txt")
filmes.close()

ler = open(x+"/temp.txt",'r')
leitura = ler.readlines()
lista = []
lista.append(leitura)
ler.close()

print lista

Fica aqui o que eu já engendrei até agora. A minha ideia seguinte era editar o conteúdo da lista. Ora, o output vem nestes termos:

[['Biblioteca\n', 'Desktop\n', 'downloads\n', 'Filmes&Series\n', 'folding@home\n', 'Imagens\n', 'Jogos\n', 'musica\n', 'svnpap\n', 'temp.txt\n', 'TransGaming_Drive\n', 'Universidade\n']]

Eu queria separar cada pasta em seu item na lista tipo isto:

['Biblioteca\n', 'Desktop\n', 'downloads\n', 'Filmes&Series\n', 'folding@home\n', 'Imagens\n', 'Jogos\n', 'musica\n', 'svnpap\n', 'temp.txt\n', 'TransGaming_Drive\n', 'Universidade\n']

E depois editar cada item da lista para tirar o irritante \n :P

Já tive a ler por aqui nos meus ebooks mas ainda não encontrei nada que me satisfaça.. Desculpem estar a ser uma autêntica melga :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para tirares o \n, em vez de lista.append(leitura) usa lista = leitura.strip()

Em relação ao código, não precisas do handler filmes uma vez que quem escreve é a bash e não o python.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Erro:

Traceback (most recent call last):
  File "tryme.py", line 19, in <module>
    lista = leitura.strip()
AttributeError: 'list' object has no attribute 'strip'

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então faz:

for i in leitura:
    leitura[i] = leitura[i].strip()
lista = leitura

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já começo a ter saudades de Pascal :P

  File "tryme.py", line 20, in <module>
    leitura[i] = leitura[i].strip()
TypeError: list indices must be integers

Tive a ler nos tuts e não estou a ver porque raio está a dar erro :s É preciso definir o i?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

bah. então:

for i in leitura:
    lista.append(i.strip())

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Luv u :)

EDIT: tinha-me enganado numa variável, já está tudo bom :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Fica aqui o código inteiro. My first Python program :) É para eu que sou preguiçoso não ter que escolher que filme quero ver ... Assim é random :P

Next improvements... fazer o media player arrancar automaticamente com o filme escolhido :P

import os, string, random

x = raw_input('Digite o caminho para a pasta dos filmes\n')

os.system('cd '+x)
filmes=open(x+"/temp.txt", 'w')
os.system("ls "+x+"> "+x+"/temp.txt")
filmes.close()

ler = open(x+"/temp.txt",'r')
leitura = ler.readlines()
ler.close()
lista = []
for i in leitura:
lista.append(i.strip())

os.system("rm -R "+x+"/temp.txt")

# print lista

os.system('clear')

# print leitura

escolha = random.choice(leitura)
while escolha == 'temp.txt':
escolha = random.choice(leitura)

print 'Porque nao este filme? '+escolha

raw_input('\nPrima Enter para sair')
os.system('clear')

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

import os, string, random

x = raw_input('Digite o caminho para a pasta dos filmes\n')

os.system('cd '+x)
os.system("ls "+x+"> "+x+"/temp.txt")

ler = open(x+"/temp.txt",'r')
leitura = ler.readlines()
ler.close()
lista = []
for i in leitura:
if i != "text.txt\n": lista.append(i.strip())

os.system("rm "+x+"/temp.txt")

os.system('clear')

escolha = random.choice(leitura)

yon=raw_input('Porque nao este filme? '+escolha)
try:
    while 1:
        if yon.lower() == 's':
            os.system("totem "+escolha)
            yon = 'q'
        elif yon.lower() == 'n':
            escolha = random.choice(leitura)
            yon = 'q'
        else: yon=raw_input('Porque nao este filme? '+escolha)
except KeyboardInterrupt:
    print "\n\nAdeus. "
    os.exit(0)

Não testei. s para reproduzir, n para escolher outro, ctrl+c para sair. Está a usar o totem como player.

Uma coisa, existem bibliotecas para fazer list das directorias.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

import os, string, random

x = raw_input('Digite o caminho para a pasta dos filmes\n')

leitura = os.listdir(x)

lista = []
for i in leitura:
if i != "text.txt": lista.append(i)

escolha = random.choice(leitura)
if x[-1] != "/": x += "/"
yon=raw_input('Porque nao este filme? '+escolha)
try:
    while 1:
        if yon.lower() == 's':
            os.system("totem "x+escolha)
            yon = 'q'
        elif yon.lower() == 'n':
            escolha = random.choice(leitura)
            yon = 'q'
        else: yon=raw_input('Porque nao este filme? '+escolha)
except KeyboardInterrupt:
    print "\n\nAdeus. "
    os.exit(0)

Adicionei a listagem usando funções built-in.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora