
Николай
02.02.2019
17:48:10
Магия
mount | grep /sd
? Точно такая команда в терминале работает?

Alph
02.02.2019
17:50:13

Сергей
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, здесь такого нет?

Alph
02.02.2019
17:54:42

Dk
02.02.2019
17:54:53
товарищи , подскажите пожалуйста , почему вот это работает subprocess.check_output(['fdisk', '-l'] , а это нет subprocess.check_output(['mount', '|' ,'grep' , '/sd']) , с ошибкой subprocess.CalledProcessError: Command '['mount', '|', 'grep', '/sd']' returned non-zero exit status 1.
Может /sd в кавычки обернуть?

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

Alph
02.02.2019
17:56:13

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

Марк
02.02.2019
17:58:52
товарищи , подскажите пожалуйста , почему вот это работает subprocess.check_output(['fdisk', '-l'] , а это нет subprocess.check_output(['mount', '|' ,'grep' , '/sd']) , с ошибкой subprocess.CalledProcessError: Command '['mount', '|', 'grep', '/sd']' returned non-zero exit status 1.
Насколько помню, тебе не нужно писать конвеер аргументом. Там просто фигачишь типо
ps aux| grep ololo

Alph
02.02.2019
17:59:41

Марк
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

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

Alex
02.02.2019
18:02:42

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

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

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

Google

Alph
02.02.2019
18:07:16

Alex
02.02.2019
18:08:50

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 вычитать?

Alph
02.02.2019
18:10:13

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

Марк
02.02.2019
18:16:06

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

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

Alph
02.02.2019
18:22:39

Марк
02.02.2019
18:24:55

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

Марк
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
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