LINUX.ORG.RU

Взаимодействие Python и Linux.


0

1

Как присвоить переменной одно значение, если команда

os.system('ps -e | grep htop')

закончилась положительно, то есть процесс был найден. И другое, если нет.



Последнее исправление: PymOxim (всего исправлений: 2)

питон не знаю, но мнение имею

os.system
On Unix, the return value is the exit status of the process encoded in the format specified for wait()
PS
лучше юзать pgrep htop

zolden ★★★★★
()
Ответ на: комментарий от anonymous

И как проверить запущен ли процесс или нет с помощью твоего subprocess?

PymOxim
() автор топика

Черeз os это deprecated, use subprocess

from subprocess import call

vr = "one" if call('ps -e | grep htop', shell=True) == 0 else "zero"

print vr

anonymous
()

Тред не читал, но надо использовать subprocess

tailgunner ★★★★★
()
Ответ на: комментарий от Donnie_Darko

Спасибо. Второй пример: У меня есть текстовый файл, в нем написано true или false. Надо прочитать файл. Если в нем написано true, то выдать 'ок', если false, то 'not ok'.

f=open('clipboard')
active=f.read()
if active=='true':
   print 'ok'
Так как я написал, не получается.

PymOxim
() автор топика
Ответ на: комментарий от PymOxim

Писец, раздел Development.

школиe, не пора ли наконец почитать чень-ть вроде «Питон для домохозяек»?

anonymous
()
Ответ на: комментарий от Donnie_Darko

Спасибо, друг. Я начинающий питонер. Задумал тут программу. С 8:00 без передышки ломаю голову над ней.

PymOxim
() автор топика
Ответ на: комментарий от pylin

> А как же режим труда и отдыха! ) К черту отдых! Всю ночь не спал - думал над программой, сегодня весь день пилю.

PymOxim
() автор топика
Ответ на: комментарий от anonymous

> Чё ему отдыхать, судя по вопросам и коду он особо и не напрягается. А вот тут ты не прав тролль.

PymOxim
() автор топика
Ответ на: комментарий от Donnie_Darko

Пытаюсь записать в файл длинную строку

f2=open('ams2'+'.py','w')
f2.write('#!/usr/bin/python\n'+'while True:')
Пишет:
IndentationError: expected an indented block
Что это значит?

PymOxim
() автор топика
Ответ на: комментарий от PymOxim

«IndentationError: expected an indented block» означает ошибку в форматировании кода. Т.е. к примеру у тебя есть код:

if SomeParam is True:
do_something()

такой код приведет к ошибке, так как у тебя if нигде не закрывается. в зависимости от алгоритма, ты должен написать либо

if SomeParam is True:
    do_something()

и тогда do_something испольниться в случае если SomeParam верен, либо

if SomeParam is True:
    pass
do_something()

в таком случае, мы явно говорим интерпретатору ничего не делать(такое к примеру иногда нужно во время разработки приложения, когда пишешь условие, потом переходишь к другому блоку кода, а к условию возвращаешься потом).

Из того, что ты привел, я не совсем понял, где именно у тебя ошибка:

в коде

f2=open('ams2'+'.py','w')
f2.write('#!/usr/bin/python\n'+'while True:')

или же в том коде, который ты сгенерировал:

ams2.py

#!/usr/bin/python
while True:

если в ams2.py, то ты не указал что надо делать в while, если ничего, то поставь pass хотя бы.

В любом случае, насколько я понял у тебя скорее хромает алгоритм, нежели код. Зачем ты вообще из питона генерируешь питон?

Если у тебя есть время, то настоятельно рекомендую ознакомиться с книгой SICP(Structure and Interpretation of Computer Programs), она очень четко поможет тебе понять азы программирования. Эта книга распостраняется бесплатно, есть перевод на русский. Если она покажется тебе сложной, то можешь до нее прочесть книгу HTDP(How to Design Programs).

Надеюсь, что помог.

Donnie_Darko
()
Ответ на: комментарий от anonymous

Читаю «Изучаем Питон. Издание 4-ое» - неплохая книжка(и довольно толстая). Полностью, пока, не осилил. Потому как, только начал изучать. Не, серьёзно займусь питоном. Это модный язык программирования :)

PymOxim
() автор топика
Ответ на: комментарий от anonymous

>То что ты не читал ни одного учебника по Python, очевидно же

Хватит троллить, он как раз задает ТИПИЧНЫЕ для начинающих вопросы. Вопрос с тем, что «true»!=«true\n» вообще классика. Чтение книг по Питону не поможет, тут как раз надо читать немножко другую литературу.

Donnie_Darko
()
Ответ на: комментарий от Donnie_Darko

Создал функцию:

def ams2_alive():
	if not os.popen('find -name ams2').read():
		f2=open('ams2'+'.py','w')
		f2.write('#!/usr/bin/python\n'+'while True:')
		f2.close()
		os.system('chmod +x ams2.py')
		os.system('python ams2.py')
Запускаю ее в теле цикла:
while True:
   command=raw_input(':$ ')
   if command=='file':
       ams2_alive()
Это выдает вышеуказанную ошибку.

PymOxim
() автор топика
Ответ на: комментарий от PymOxim

ну вот, создал ты файл ams2.py и запустил его, а в нем ошибка, как я и говорил.
файл ams2.py выглядит как:

#!/usr/bin/python
while True:

что должен делать while? у тебя нету никакого кода, вот тебе ошибка и говорит об этом.

Что должен делать файл ams2.py?

Donnie_Darko
()
Ответ на: комментарий от PymOxim

И таки да, то что ты пытаешься делать называется DSL(domain-specific language), отложи свою книгу по питону и читай то, что я выше посоветовал.

Donnie_Darko
()
Ответ на: комментарий от Donnie_Darko

Почитаю. На сегодня, в любом случае, достаточно. И так целый день, с 8 до 8 сижу. Интересную штуку задумал - способность к саморепликации.

PymOxim
() автор топика
Ответ на: комментарий от Donnie_Darko

У меня список на кириллице выводится в неверной кодировке:

S=('раз','два')
print S[:]
('\xd1\x82\xd0\xb0\xd0\xbd\xd0\xba\xd0\xb8', '\xd0\xb1\xd0\xb0\xd0\xb7\xd0\xb0+5')
В начале программы написал:
 # -*- coding: utf-8 -*-

PymOxim
() автор топика
Ответ на: комментарий от baverman

> А твоя штука, так, слегка усложненный HelloWorld.
Троллить иди в другое место. Я уже пишу более сложные программы, чем HelloWorld.

PymOxim
() автор топика
Ответ на: комментарий от PymOxim

Я уже пишу более сложные программы, чем HelloWorld.

Молодец, но я говорил конкретно о твоём первоначальном недоквайне.

baverman ★★★
()
Ответ на: комментарий от PymOxim

1. зачем писать print S[:], когда можно писать просто print S
2. для правильного отображения кортежа, можешь написать так:

", ".join(S)
3. точно не уверен, но вроде бы print печатает «дамп» кортежа, вот поэтому кириллица так выводится. т.е. это не неверная кодировка.

Donnie_Darko
()
Ответ на: комментарий от marvin_yorke

> но пока не более полезные
Для кого как.

PymOxim
() автор топика
Ответ на: комментарий от Donnie_Darko

IDLE, python 2.7, оффтопик

>>> s = 'привет'
>>> print s
привет
>>> print ('привет', 'мир')
('\xef\xf0\xe8\xe2\xe5\xf2', '\xec\xe8\xf0')
>>> print (u'привет', u'мир')
(u'\xef\xf0\xe8\xe2\xe5\xf2', u'\xec\xe8\xf0')
>>> s1 = (u'привет', u'мир')
>>> print s1
(u'\xef\xf0\xe8\xe2\xe5\xf2', u'\xec\xe8\xf0')
>>> print s1[0]
ïðèâåò
>>> type(s)
<type 'str'>
>>> type(s1)
<type 'tuple'>
>>> type(s1[0])
<type 'unicode'>

marvin_yorke ★★★
()
Ответ на: комментарий от PymOxim

Вот эта запись - ", ".join(S) непонятная.

Python 2.6.4 (r264:75706, Jun  4 2010, 18:20:16) 
[GCC 4.4.4 20100503 (Red Hat 4.4.4-2)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> tuple = ("привет", "мир")
>>> print tuple
('\xd0\xbf\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82', '\xd0\xbc\xd0\xb8\xd1\x80')
>>> print ", ".join(tuple)
привет, мир
>>> 

join - метод, который объединяет список или кортеж в строку. "," - означает что между членами списка/кортежа будет запятая. но оно может быть любой строкой: ",", ".", ";", " "...

Donnie_Darko
()
Ответ на: комментарий от PymOxim

неа, не спец я ни разу ;)
по сравнению со мной тут такие ЗУБРЫ обитают!

Donnie_Darko
()
Ответ на: комментарий от PymOxim

>>Я уже пишу более сложные программы,

дениска попов залогинься

ggrn ★★★★★
()
Ответ на: комментарий от baverman

Ну, если key в кириллице, то так не получится.

>>> dict={"baverman":1, "мы":2, "вместе":3, "троллили":4, "в Jobs":5, "соседа":6, ";)":7}
>>> ', '.join('%s:%s' % r for r in dict.items())

'baverman:1, \xd1\x82\xd1\x80\xd0\xbe\xd0\xbb\xd0\xbb\xd0\xb8\xd0\xbb\xd0\xb8:4, \xd0\xb2\xd0\xbc\xd0\xb5\xd1\x81\xd1\x82\xd0\xb5:3, \xd0\xbc\xd1\x8b:2, \xd0\xb2 Jobs:5, \xd1\x81\xd0\xbe\xd1\x81\xd0\xb5\xd0\xb4\xd0\xb0:6, ;):7'
Donnie_Darko
()
Ответ на: комментарий от Donnie_Darko
Python 2.7.1 (r271:86832, Apr 15 2011, 12:11:58) 
[GCC 4.5.2 20110127 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 'твой ip тоже забанили?'
'\xd1\x82\xd0\xb2\xd0\xbe\xd0\xb9 ip \xd1\x82\xd0\xbe\xd0\xb6\xd0\xb5 \xd0\xb7\xd0\xb0\xd0\xb1\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xbb\xd0\xb8?'
>>>

Ничего похожего не находишь? :)

baverman ★★★
()
Ответ на: комментарий от baverman
dict={1:'постинг', 2:'заблокирован', 3:'бладж', 4:'и я', 5:'чё-то', 6:'ступил', 7:'сейчас'}
print ', '.join(map(lambda i: "%s:%s" % i, dict.items()))
Donnie_Darko
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.