Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #59 da revista programar. Faz já o download aqui!

simbamix

Temporizador em python

Mensagens Recomendadas

simbamix    0
simbamix

Boa tarde,

Estou aqui com um problema no meu script.

Queria executar uma parte do codigo uma certa parte de segundos, o que já está a funcionar.

Eu queria introduzir esses segundos através do segundo argumento, ou seja python teste.py 1arg 50

Estou a utilizar o seguinte codigo para adicionar o tempo: t_end = time.time() + 20

Mas como faço para transformar isso para ele obter pelo argumento? Exemplo:t_end = time.time() + sys.argv[2], ele dá erro

Obrigado :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
M6    107
M6

Que erro é que dá?


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
M6    107
M6

Se leres o erro com atenção está ai tudo bem explicado: o operador + não consegue somar um float com uma string...

Tens de converter a string para um numérico.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
simbamix    0
simbamix

Muito obrigado, consegui pela tranformação: tempoo = int(sys.argv[2])

Agora outra duvida:

 

Estou num while e quando esse while acaba, que está verdadeira, vai para um else: que quando a "afirmação" está falsa.

 

Eu queria parar o programa, ou seja matar o programa, porem ja tentei dentro do else usar o exit, quit, etc... Sem resultado.

 

Como posso sair do programa? 

Obrigado :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
M6    107
M6

Usas o sys.exit(0). Podes é ter um erro de lógica.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Bernardo Vieira    1
Bernardo Vieira

Sim, eu percebo que fecha sozinho e percebo também a preocupação com os recursos (é importante) mas existe possibilidade de fechar logo a seguir a esse "if:else" ou ainda existe muito código pela frente ? No caso de isso ser tio uma classe que está a iniciar conexão á base de dados ou assim, será necessário esse "exit", mas se o programa fechar poucas linhas, então não é necessário.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
simbamix    0
simbamix

Essa parte do código está numa classe, e há muito código pela frente 

Já tentei muitas coisas mas o programa não quer fechar :/

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Bernardo Vieira    1
Bernardo Vieira

Então estás a fazer um bom uso (só perguntei porque por vezes, algumas pessoas usam de forma incorreta)

E já tentaste executar só o código python ? Se recebe variáveis, enviar para lá uns valores aleatórios, que funcionem.
PS. não sei exatamente como funciona, mas não terás de retornar uma variável para php ? Talvez por tentares fechar assim é que não funciona. Não sei :/ Provavelmente o código python pára mas o php não sabe o que fazer!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
M6    107
M6

Não sei se percebi bem.
Quando executas o código através de linha de comando ele fecha?
 


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
M6    107
M6

Eu diria que tens um erro de lógica nesse código ou então o programa está à espera de algo externo (e.g. ligação http).

Coloca uns prints com os valores da variáreis para verificar se efetivamente estás a obter os valores que estavas à espera. Pode estar a dar-se o caso de que o código nunca chega ao exit().


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
simbamix    0
simbamix

Ou seja, ele chega a esta parte do código, e faz um temporizador: 

tempoo = int(sys.argv[2])
t_end = time.time() + tempoo

Depois, vai para uma classe, que está a dizer: while time.time() < t_end:

quando o tempo acabar ele vai para o else:

 sys.exit(0)

Estarei a fazer algo de errado? O while usa-se com o else? 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
M6    107
M6

Ah, está desvendado o mistério. O While não tem Else, isso é do If.

O While é um ciclo que executa o código interno do mesmo enquanto a condição é verdadeira. Quando a condição é falsa, sai do ciclo.
Vê aqui: https://wiki.python.org/moin/WhileLoop


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Nilo Menezes    3
Nilo Menezes

Em Python você pode escrever:

while a < 10:
     print(a)
     a+=1
else:
     print("nao")

 

Você também pode ter else em um for, mas o funcionamento é um pouco diferente.

O else do while é executado quando a condição for falsa.

No caso do for, o else só é executado caso a repetição seja vazia.

 

Quanto aos temporizadores, se você não precisa de muita precisão, time.time() + intervalo resolve, mas se precisar por exemplo chamar uma função cada x segundos, melhor usar o Timer do módulo threading ou o sched: https://docs.python.org/3/library/sched.html

Editado por thoga31
Caixa de código
  • Voto 1

Partilhar esta mensagem


Ligação 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

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.