Chciałem nadawać wiadomość do wszystkich terminalu bash na moim Raspbian.

Rozumiem, że istnieje polecenie Wall, aby wykonać krok i mogłem użyć modułu OS.System Python, aby wykonać polecenie.

Jednak uruchomienie polecenia "Wall Text.txt" wymaga przywileju sudo. Czy jest jakiś sposób, aby użyć komendy ściennej z STDIN z Pythona?

2
SoGeeky 13 sierpień 2014, 13:26

2 odpowiedzi

Najlepsza odpowiedź

Właściwie musi być superużytkownik do uruchomienia wall za pomocą pliku wejściowego, man mówi:

NAME
     wall - write a message to users

SYNOPSIS
     wall [file]

DESCRIPTION
     Wall displays the contents of file or, by default, its standard input, on the terminals of all currently logged in users.

     Only the super-user can write on the terminals of users who have chosen to deny messages or are using a program which automatically denies messages.

     Reading from a file is refused when the invoker is not superuser and the program is suid or sgid.

Ale możesz to zrobić:

$ echo hello hello >text.txt
$ python                    
Python 2.7.1 (r271:86832, Mar 18 2011, 09:09:48) 
[GCC 4.5.0 20100604 [gcc-4_5-branch revision 160292]] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.system('cat text.txt | wall')

Broadcast Message from mak@vader                                             
        (/dev/pts/14) at 10:31 ...                                             

hello hello                                                                    


Broadcast Message from mak@vader                                            
        (/dev/pts/14) at 10:31 ...                                             

hello hello                                                                    

0
>>> 
3
piokuc 13 sierpień 2014, 09:32

Możesz użyć "echo" i rury "|" To do Wall.it nie jest konieczne, aby echo wypełnić najpierw.

echo hello | wall
2
ayhan 23 sierpień 2016, 19:29