@ru_python

Страница 7972 из 9768
Николай
02.02.2019
17:48:10
Магия

mount | grep /sd ? Точно такая команда в терминале работает?

Alph
02.02.2019
17:50:13
mount | grep /sd ? Точно такая команда в терминале работает?
а почему бы ей там не работать? простейший конвеер

Сергей
02.02.2019
17:51:39
Наверное, потому что здесь запуск 2 команд. Надо попробовать любые 2 команды через pipe так же выполнить.

Google
Николай
02.02.2019
17:52:29
Разве сабпррцесс такое не позволяет?

Сергей
02.02.2019
17:53:34
Вообще то это bash такое позволяет. Вряд ли здесь через оболочку запускаются команды

в Popen есть параметр shell=True, здесь такого нет?

Сергей
02.02.2019
17:55:33
по идее, нужно передать вывод одной команды на вход другой

Alph
02.02.2019
17:56:13
по идее, нужно передать вывод одной команды на вход другой
вот похоже на то , что grep на вход ничего не получает , и возвращает ошибку

Сергей
02.02.2019
17:57:12
надо гуглить реализацию конвеера через сабпроцессы

Alph
02.02.2019
17:59:41
Насколько помню, тебе не нужно писать конвеер аргументом. Там просто фигачишь типо ps aux| grep ololo
не , 15 минут назад нагуглил что аргументы нужно передавать списком

Насколько помню, тебе не нужно писать конвеер аргументом. Там просто фигачишь типо ps aux| grep ololo
https://stackoverflow.com/questions/24306205/file-not-found-error-when-launching-a-subprocess-containing-piped-commands

Марк
02.02.2019
18:00:18
В двойке была хорошая либа commands как надстройка. Там просто пишешь - и порядок. Без мучения

Alph
02.02.2019
18:01:18
Google
Alph
02.02.2019
18:01:32
не считая вывод в переменную

тьфу блин , вот где собака зарыта

Марк
02.02.2019
18:02:16
а subprocess.run() сильно отличается от subprocess.check_output() ?
Я не разбирался во всех тонкостях работы этой либы. Мне она не нравится. Просто юзал или коммандс или чек аутпут, чтобы вывести результат какой-то. И на этом всё

Alph
02.02.2019
18:02:18
check_output сразу вывод 'fdisk -l' в переменную записал , а grep ничего не досталось

Alph
02.02.2019
18:02:51
ща попробую через subprocess.run()

Aragaer
02.02.2019
18:03:10
>>> import subprocess >>> subprocess.run("echo 1 + 2 | bc", shell=True) 3

Alph
02.02.2019
18:03:11
а в чем задача то напомните
да отобразить в проге какие дисковые устройства примонтированы

Aragaer
02.02.2019
18:03:12
умм

Alex
02.02.2019
18:03:13
>> subprocess.check_output(['mount', '|' ,'grep' , '/sd']) вот это работать не будет

потому что это не баш \ шелл

Aragaer
02.02.2019
18:04:01
>>> subprocess.run("mount | grep sdb", shell=True) /dev/sdb1 on /home type ext4 (rw,relatime,commit=60,stripe=32744,data=ordered) /dev/sdb4 on /var/extra type ext4 (rw,relatime,commit=60,data=ordered) /dev/sdb4 on /home/aragaer/.wine_teso type ext4 (rw,relatime,commit=60,data=ordered)

Alex
02.02.2019
18:04:02
да отобразить в проге какие дисковые устройства примонтированы
а эм… нафиг grep, ты распарсить в программе не можешь?

Aragaer
02.02.2019
18:04:17
в чем вопрос?

альтернативный вариант

>>> subprocess.run(["sh", "-c", "mount | grep sdb"]) /dev/sdb1 on /home type ext4 (rw,relatime,commit=60,stripe=32744,data=ordered) /dev/sdb4 on /var/extra type ext4 (rw,relatime,commit=60,data=ordered) /dev/sdb4 on /home/aragaer/.wine_teso type ext4 (rw,relatime,commit=60,data=ordered) CompletedProcess(args=['sh', '-c', 'mount | grep sdb'], returncode=0)

но вобщем это примерно то же самое, в документации так и говорится

Alph
02.02.2019
18:06:12
да мне по хитрому нужно , что бы пользователю понятно было , что за диски примонтированы , это позволяет сделать команда fdisk -l , но она показывает все устройства , а мне необходимы только примонтированные

Alex
02.02.2019
18:06:15
не , 15 минут назад нагуглил что аргументы нужно передавать списком
есть разница между передачей списком и строкой (c shell=True). почитайте штоле про execv

Aragaer
02.02.2019
18:06:54
так ты можешь в коде отфильтровать

Google
Alph
02.02.2019
18:07:16
Aragaer
02.02.2019
18:08:54
>>> for line in subprocess.run("mount", stdout=subprocess.PIPE).stdout.split(b"\n"): ... if b"sdb" in line: ... print(line) ... b'/dev/sdb1 on /home type ext4 (rw,relatime,commit=60,stripe=32744,data=ordered)' b'/dev/sdb4 on /var/extra type ext4 (rw,relatime,commit=60,data=ordered)' b'/dev/sdb4 on /home/aragaer/.wine_teso type ext4 (rw,relatime,commit=60,data=ordered)'

Alph
02.02.2019
18:09:05
mount | grep /sd /dev/sda5 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered) /dev/sda1 on /boot/efi type vfat (rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro) /dev/sda6 on /home type ext4 (rw,relatime,data=ordered) fdisk -l /dev/sda1 2048 534527 532480 260M EFI /dev/sda2 534528 567295 32768 16M Зарезервированный раздел Microsoft /dev/sda3 567296 354939017 354371722 169G Microsoft basic data /dev/sda4 975017984 976773119 1755136 857M Среда для восстановления Microsoft /dev/sda5 502396928 697706495 195309568 93,1G Файловая система Linux /dev/sda6 697706496 951613439 253906944 121,1G Файловая система Linux /dev/sda7 951613440 975017983 23404544 11,2G Linux своп как лучше смешать что бы бестпрактис ?

Alex
02.02.2019
18:09:39
или вообще нафиг subprocess, если можно через /proc/mounts вычитать?

Aragaer
02.02.2019
18:10:34
там то же самое

Марк
02.02.2019
18:16:06
да мне по хитрому нужно , что бы пользователю понятно было , что за диски примонтированы , это позволяет сделать команда fdisk -l , но она показывает все устройства , а мне необходимы только примонтированные
subprocess.check_output('uname -a|grep ololo; exit 0;', shell=True, stderr=subprocess.STDOUT). Если греп не сработал, то будет возвращаться пустое значение и отработает без ошибки

Terminator
02.02.2019
18:16:53
@alexmikitin будет жить. Поприветствуем!

Yurii
02.02.2019
18:18:54
не находит на винде 7 модуль scrapy поставил анакондой

Марк
02.02.2019
18:24:55
stderr=subprocess.STDOUT перенаправляет вывод stderr на stdout ?
Не только. Когда ты грепаешь и замаунченного ничего нет, то ошибки нет в STDERR, и ничего не возвращается. Поэтому на выходе ошибка. Тебе надо добавить exit, который в этом случае будет возвращать какое-то значение

Terminator
02.02.2019
18:25:14
Sultan будет жить. Поприветствуем!

Black Wolf будет жить. Поприветствуем!

Aragaer
02.02.2019
18:27:17
эээм

exit 0 всегда будет возвращать успех

зачем тогда вообще проверять?

Марк
02.02.2019
18:28:32
Я проверил - нет. Или возврат значения грепа, или если нет ничего, то результат exit. Если не возвращать ничего, то чек-аутпут ругнется, что нет никакого кода выхода

Aragaer
02.02.2019
18:28:57
тогда не надо делать check_output

Google
Aragaer
02.02.2019
18:29:11
а делать просто run

Марк
02.02.2019
18:29:36
Ну почему? У тебя или(по сабжу) замаунченные диски, или ничего. Всё норм

Aragaer
02.02.2019
18:29:41
смысл check_output именно в том, чтобы что-то сделать, если результат "не успех", а смысл exit 0 - сделать "всегда успех"

Марк
02.02.2019
18:30:25
И что?

Aragaer
02.02.2019
18:30:44
просто сделать run и все

Alph
02.02.2019
18:31:01
смысл check_output именно в том, чтобы что-то сделать, если результат "не успех", а смысл exit 0 - сделать "всегда успех"
я пользовался check_output , что бы он мне вывод в переменную записал , run не хотел записывать

Марк
02.02.2019
18:31:27
Он спрашивал про чек-аутпут. Его сходу не забороли и начали предлагать другие варианты. Вот в моем варианте забороли. Проблем с ним нет

Aragaer
02.02.2019
18:31:53
чтобы вывод был записан в переменную - stdout=subprocess.PIPE, и потом из результата прочитать result.stdout

я пример выше приводил

Марк
02.02.2019
18:32:22
run, кстати, плохо масштабируемое говно. В три строки команду с тонной конвееров заебешься на нем писать. Это страшно раздражает

Aragaer
02.02.2019
18:32:56
'|'.join("command1", "command2", "command3")

но лучше так не делать кэшн

Марк
02.02.2019
18:35:31
Это всё +/- те же яица только в профиль. Захотел человек этот метод заюзать - да пускай. -

Это же не ананасы в пицце

Maxim robox
02.02.2019
18:37:00
Марк
02.02.2019
18:44:15
Кстати, интересно, как поведет себя check_output в случае, если маунт идет по nfs, а там убитое соединение, из-за чего при недонастройки линупса df подвисает намертво.

Ну и вообще все, что связано с попыткой чекнуть разделы

Alex
02.02.2019
18:46:28
Кстати, интересно, как поведет себя check_output в случае, если маунт идет по nfs, а там убитое соединение, из-за чего при недонастройки линупса df подвисает намертво.
а какая собственно разница? есть два варианта: 1й - ты можешь убить процесс по таймауту. и тут без разницы что check_output что run

2й - процесс ушел в uninterruptible sleep

Марк
02.02.2019
18:47:20
Google
Alex
02.02.2019
18:47:38
посмотри аргументы любой функции subprocess в документации

и если тебе нужен тонкий контроль над процессом - ты возьмешь Popen вместо враппера.

Марк
02.02.2019
18:51:35
Я к таймауту(тут уже к слову) отношусь с осторожностью. Иногда бывают проблемы на уровне сетевого стека - и никакие таймауты не работают. Соединение висит наглухо

Alex
02.02.2019
18:52:36
Tishka17
02.02.2019
18:53:14
Uninterruptible sleep при работе с сетью?

А сетью я не видел такого, что не решалось прикладными таймаутами

Alex
02.02.2019
18:53:59
Uninterruptible sleep при работе с сетью?
да, вполне может быть в случае с NFS

Страница 7972 из 9768