Найти - Пользователи
Полная версия: цикл else
Начало » Центр помощи » цикл else
1 2 3
amwww
Напишите как после else начать выполнение строки ‘for x in range(10):’?
 import random
import subprocess
pas = ''
for x in range(10): #Количество символов (10)
    pas = pas + random.choice(list('1234567890abcdefghigklmnopqrstuvyxwzABCDEFGHIGKLMNOPQRSTUVYXWZ'))
cmd = f'run --pass {pas}'
PIPE = subprocess.PIPE
p = subprocess.Popen(cmd, shell = True)
if 'world' in p: # если в выводе консоли есть слово "world" 
    fp = open('/home/test.txt', 'w') #    записать вывод в файл
    fp.write(p)
    fp.close()
else: #иначе начать выполнение строки 4
py.user.next
  
import random
import subprocess
 
pas = ''
while True:
    for x in range(10): #Количество символов (10)
        pas = pas + random.choice(
            '1234567890'
            'abcdefghigklmnopqrstuvyxwz'
            'ABCDEFGHIGKLMNOPQRSTUVYXWZ'
        )
    cmd = f'run --pass {pas}'
    PIPE = subprocess.PIPE
    p = subprocess.Popen(cmd, shell=True)
    if 'world' in p: # если в выводе консоли есть слово "world"
        fp = open('/home/test.txt', 'w') #    записать вывод в файл
        fp.write(p)
        fp.close()
        break
amwww
 if 'world' in p: # если в выводе консоли есть слово "world"
Демонстрирует ошибку
 Exception has occurred: TypeError
argument of type 'Popen' is not iterable
  File "/home/script.py", line 14, in <module>
    if 'world' in p: # если в выводе консоли есть слово "world"
py.user.next
  
>>> import subprocess
>>> 
>>> p = subprocess.Popen('cat /etc/passwd'.split(), stdout=subprocess.PIPE)
>>> 'bin' in p.stdout.read().decode('utf-8')
True
>>>
amwww
Вот такой код:
 import random
import subprocess
pas = ''
while True:
    for x in range(4): #Количество символов (4)
        pas = pas + random.choice(list('1234567890')) #Символы, из которых будет составлен пароль
    print('your password is: ', pas)
    cmd = f'torsocks --P {pas}'
    stdout=subprocess.PIPE
    p = subprocess.Popen(cmd, shell = True)
    print ('consol:', p.stdout)
    if '3333' in p.stdout.read().decode('utf-8'): # если в выводе консоли есть порт "3333" 
        fp = open('/tmp/test.txt', 'w') #    записать вывод в файл
        fp.write(p)
        fp.close()
    break
В консоли пишет:
 your password is:  2269
                       consol: None
                                   Traceback (most recent call last):
                                                                       File "/home/script.py", line 12, in <module>
                                                                                                                          if '3333' in p.stdout.read().decode('utf-8'): # если в выводе консоли есть порт "3333" 
                             AttributeError: 'NoneType' object has no attribute 'read'
                                                                                                                                                                                                                                                                          
Please provide an application to torify.
/tmp/test.txt - пуст
xam1816
 p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
amwww
xam1816
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
Так хуже:
 your password is:  9950
                       Traceback (most recent call last):
                                                           File "/home/script.py", line 10, in <module>
                                                                                                              p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
                                                                                                                                                                 File "/usr/lib/python3.10/subprocess.py", line 969, in __init__
                                                self._execute_child(args, executable, preexec_fn, close_fds,
                                                                                                              File "/usr/lib/python3.10/subprocess.py", line 1845, in _execute_child
                                                                                                                                                                                       raise child_exception_type(errno_num, err_msg, err_filename)
                                                               FileNotFoundError: [Errno 2] No such file or directory: 'torsocks -P 9950'
py.user.next
amwww
Вот такой код:
  
import random
import subprocess
pas = ''
while True:
    for x in range(4): #Количество символов (4)
        pas = pas + random.choice(list('1234567890')) #Символы, из которых будет составлен пароль
    print('your password is: ', pas)
    cmd = f'torsocks --P {pas}'
    stdout=subprocess.PIPE
    p = subprocess.Popen(cmd, shell = True)
    print ('consol:', p.stdout)
    if '3333' in p.stdout.read().decode('utf-8'): # если в выводе консоли есть порт "3333" 
        fp = open('/tmp/test.txt', 'w') #    записать вывод в файл
        fp.write(p)
        fp.close()
    break
Судя по этому коду, ты даже не понимаешь, что ты делаешь.

Например fp.write(p), по твоему замыслу, что должно давать в результате? В переменной p находится индентификатор процесса вообще-то, а не вывод процесса. Вывод процесса находится в переменной stdout, которая вложена в объект p.

Когда ты пишешь команду с torsocks, с чего ты взял, что через --P подаётся пароль туда?

Также ты читаешь как-то странно. Видимо, ты даже не можешь читать внимательно код.
Например, я писал тебе пример и с subprocess.PIPE, и из random.choice() убрал list, который там не нужен, потому что random.choice() нужна любая перебираемая последовательность, а строки в питоне уже перебираемые, их не нужно в список превращать. Но ты ни subprocess.PIPE не написал, ни этот list не убрал.

Так что советую тебе разделить задачу на составляющие и решать эти части по отдельности. Принцип программирования - “разделяй и властвуй”.
1. Сначала создай правильный код, который работает без torsocks и просто что-то запускает и пишет вывод этой программы в файл. Убедись, что скрипт и запускает программу, и пишет её вывод в файл.
2. Потом запусти torsocks с правильными опциями и убедись, что он запускается и эти указанные опции тоже работают именно в этом виде.
3. Соедини работающий скрипт из пункта 1. с работающим со всеми опциями правильно torsocks из пункта 2.
amwww
Не понятно как прочесть вывод консоли subprocess и найти в нем нужную фразу.
py.user.next
amwww
Не понятно как прочесть вывод консоли subprocess
Для этого сначала надо найти программу консольную, которую ты запускаешь и она выводит на консоль что-то. В консоли есть два канала вывода - stdout и stderr.

Если Popen() запускаешь просто с командой, то вывод этой команды пойдёт на экран. Если же ты передаёшь в Popen() аргумент stdout со значением subprocess.PIPE, то вывод команды по каналу stdout прикрепится к атрибуту stdout внутри объекта Popen(). Если же ты передаёшь в Popen() аргумент stderr со значением subprocess.PIPE, то вывод команды по каналу stderr прикрепится к атрибуту stderr внутри объекта Popen().

После выполнения команды вывод с консоли либо будет на экране, либо будет прикреплён к этим атрибутам внутри объекта, возвращённого из Popen(). Дело в том, что программа может писать как в stdout, так и в stderr в пределах одного выполнения. Поэтому и там и там могут быть записи.

Пример
  
>>> import subprocess
>>> 
>>> p = subprocess.Popen(
...     ['cat', '/etc/passwd', 'nothing'],
...     stdout=subprocess.PIPE,
...     stderr=subprocess.PIPE
... )
>>> 
>>> text_from_stdout = p.stdout.read().decode('utf-8')
>>> text_from_stderr = p.stderr.read().decode('utf-8')
>>> 
>>> print(text_from_stdout[:20])
root:x:0:0:root:/roo
>>> 
>>> print('root' in text_from_stdout)
True
>>> print('take' in text_from_stdout)
False
>>> 
>>> print(text_from_stderr[:20])
cat: nothing: No suc
>>> print('such' in text_from_stderr)
True
>>> print('ball' in text_from_stderr)
False
>>>
>>> p
<subprocess.Popen object at 0x7f2140652710>
>>>
>>> subprocess.PIPE
-1
>>>
Здесь файл /etc/passwd существует и программа cat его читает и выводит на свой stdout. Так как в Popen() передан аргумент stdout со значением subprocess.PIPE (которое просто является числовой константой), stdout программы cat присоединяется к атрибуту в объекте p (иначе всё выводилось бы на экран).
Здесь файл nothing не существует и программа cat его не может найти и выводит на свой stderr сообщение об отсутствии файла nothing. Так как в Popen() передан аргумент stderr со значением subprocess.PIPE (которое просто является числовой константой), stderr программы cat присоединяется к атрибуту в объекте p (иначе всё выводилось бы на экран).
И потом мы просто эти байтовые строки превращаем в символьные строки через декодирование в кодировку utf-8.
И после этого мы можем в этих символьных строках искать другие символьные строки.
Строка root есть в выводе программы cat, поэтому root находится в выводе программы cat, сохранённом в переменную.
Строки take нет в выводе программы cat, поэтому take не находится в выводе программы cat, сохранённом в переменную.
Строка such есть в выводе ошибок программы cat, поэтому such находится в выводе программы cat, сохранённом в переменную.
Строки ball нет в выводе ошибок программы cat, поэтому ball не находится в выводе программы cat, сохранённом в переменную.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB