Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.09.2017, 11:00   #1
Эдуард7
 
Регистрация: 08.09.2017
Сообщений: 7
Восклицание Пишу маленькую программу под Linux не могу открыть файл в режиме записи

Доброе время суток скажу сразу что я веб разработчик знаю такие языки как PHP HTML CSS SQL Javascript но питон совершенно не знаю.
Пишу программу для облегчения работы с сервером LAMP для Linux программа почти закончена осталось малое открыть файл hosts в режиме записи внести туда изменения и закрыть а также создать некоторые конфигурационные файлы на сервере но это потом

ПРОБЛЕМА в том что я не могу открыть файл в режиме записи так как файл hosts это системный файл как мне получить права на этот файл что бы его изменить?

Заранее спасибо!!!

Вот исходный код программы

Код:
#!/usr/bin/env python
import os

directory = '/var/www/' 
host = '127.0.0.1'
folder_config = '/etc/apache2/sites-enabled/'
start_coment = '#SERVER_SCRIPT_START\n'
end_coment = '#SERVER_SCRIPT_END\n'
files = os.listdir(directory) 

key = []

array = list(open('/etc/hosts'))

for i, str in enumerate(array):
    if(str.startswith(start_coment) | str.startswith(end_coment)):
                key.append(i)
                

d = key[1]

while d >= key[0]:
    array.pop(d)
    d -= 1

array.append(start_coment)
for str in files:
	array.append(host + '    ' + str + '\n')
array.append(end_coment)
# ТУТ ОШИБКА
host_file = open("/etc/hosts", "w")
for str in array:
	host_file.write(str)

host_file.close()
Да согласен что программа может не идеальна но по другому не умею так как не знаю питон

______________________
Используйте тег [CODE] (кнопка с решеткой # в форме сообщения) при вставке кода на форум.
Web разработчик (PHP HTML CSS SQL), в данный момент изучаю Android разработку.

Последний раз редактировалось Alex11223; 08.09.2017 в 11:17.
Эдуард7 вне форума Ответить с цитированием
Старый 08.09.2017, 11:22   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Запускать с sudo?
Цитата:
Сообщение от Эдуард7 Посмотреть сообщение
Пишу программу для облегчения работы с сервером
Для такого уже давно придумали например Ansible. Там уже за вас учтено много всего (в том числе возможность указать необходимость прав и т.п.), так что обычно это проще и надежнее своего скрипта с нуля.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 08.09.2017, 11:26   #3
Эдуард7
 
Регистрация: 08.09.2017
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Запускать с sudo?
Для такого уже давно придумали например Ansible. Там уже за вас учтено много всего (в том числе возможность указать необходимость прав и т.п.), так что обычно это проще и надежнее своего скрипта с нуля.
А как его установить и как им пользоваться заранее спасибо!
Web разработчик (PHP HTML CSS SQL), в данный момент изучаю Android разработку.
Эдуард7 вне форума Ответить с цитированием
Старый 08.09.2017, 11:59   #4
Эдуард7
 
Регистрация: 08.09.2017
Сообщений: 7
По умолчанию

Установил ansible как мне с ном работать? Мне необходимо когда создается папка в определенной директории добавить в файл hosts запись такого вида 127.0.0.1 имя папки которую только что создали и в другой директории создать файл имя папки которую только что создали.conf и там прописать следующее
Код:
 <VirtualHost *:80>
ServerName имя папки которую только что создали
DocumentRoot /var/www/имя папки которую только что создали/
</VirtualHost>
и перезапустить апач все больше ничего ненадо
Web разработчик (PHP HTML CSS SQL), в данный момент изучаю Android разработку.
Эдуард7 вне форума Ответить с цитированием
Старый 08.09.2017, 12:17   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну почитайте документацию и туториалы какие-нибудь.

https://www.google.com/search?q=ansible+vhost+apache
https://www.google.com/search?q=ansible+/etc/hosts+add

А зачем "когда создается папка"? Выглядит сложно, можно ж просто запустить скрипт/плейбук в ручную и в нем кроме прочего и папку создать. (имена брать из какого-нибудь простого конфига или аргумента командной строки )
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 08.09.2017, 15:35   #6
Эдуард7
 
Регистрация: 08.09.2017
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Ну почитайте документацию и туториалы какие-нибудь.

https://www.google.com/search?q=ansible+vhost+apache
https://www.google.com/search?q=ansible+/etc/hosts+add

А зачем "когда создается папка"? Выглядит сложно, можно ж просто запустить скрипт/плейбук в ручную и в нем кроме прочего и папку создать. (имена брать из какого-нибудь простого конфига или аргумента командной строки )
Жаль что по Русски мало написано про ansible. Да можно и в ручную скрипт запускать для меня это не критично
Web разработчик (PHP HTML CSS SQL), в данный момент изучаю Android разработку.
Эдуард7 вне форума Ответить с цитированием
Старый 12.09.2017, 08:38   #7
vasek123
Заблокирован
 
Регистрация: 21.11.2008
Сообщений: 4,988
Сообщение

что то не пойму сути вопроса, для того чтобы открыть любой файл для редактирования и записи существует прекрасная команда:

Код:
sudo nano [файл]
Для того чтобы назначить права на данный файл:

Код:
sudo chmod [параметры][файл]
p.s. Сдается мне что ТС в первую очередь необходимо учить Linux, если уж сидит в данной среде и только потом Python.

Последний раз редактировалось vasek123; 12.09.2017 в 08:41.
vasek123 вне форума Ответить с цитированием
Старый 12.09.2017, 08:45   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

И как ему nano поможет? (да и вообще фигня команда, sudo vim [файл] лучше )

Автор же не хочет каждый раз писать команды в консоли, потому и пишет скрипт.

А про sudo я ж сказал давно.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 14.09.2017, 14:23   #9
Эдуард7
 
Регистрация: 08.09.2017
Сообщений: 7
По умолчанию

Доброе время суток. Спасибо ОГРОМНОЕ всем кто помогал вот конечный скрипт написан мной на питоне с нуля отрабатывает как надо если запускать его в консоли вот так sudo python 'путь к файлу.py'
Код:
#!/usr/bin/env python
import os, subprocess


directory = '/var/www/' 
host = '127.0.0.1'
folder_config = '/etc/apache2/sites-available/'
link_config = '/etc/apache2/sites-enabled/'
start_coment = '#SERVER_SCRIPT_START\n'
end_coment = '#SERVER_SCRIPT_END\n'
files = os.listdir(directory) 

key = []

array = list(open('/etc/hosts'))

for i, str in enumerate(array):
    if(str.startswith(start_coment) | str.startswith(end_coment)):
                key.append(i)
                

d = key[1]

while d >= key[0]:
    array.pop(d)
    d -= 1

array.append(start_coment)
for str in files:
    array.append(host + '    ' + str + '\n')
array.append(end_coment)

host_file = open("/etc/hosts", "w")
for str in array:
    host_file.write(str)

host_file.close()



for str in files:
    file = folder_config+str+'.conf'
    if(os.path.exists(file) == False):
            text_for_file = '<VirtualHost *:80>\n    ServerName '+str+'\n    DocumentRoot /var/www/'+str+'/\n</VirtualHost>'
            conf_file = open(file, 'w')
            conf_file.write(text_for_file)
            conf_file.close()
            cmd = 'ln -s '+file+' '+link_config+str+'.conf'
            PIPE = subprocess.PIPE
            p = subprocess.Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=subprocess.STDOUT, close_fds=True)


cmd = 'sudo /etc/init.d/apache2 restart'
PIPE = subprocess.PIPE
p = subprocess.Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=subprocess.STDOUT, close_fds=True)
Теперь думаю как его скомпилировать чтобы каждый раз не писать в консоль а сразу запускать
Web разработчик (PHP HTML CSS SQL), в данный момент изучаю Android разработку.
Эдуард7 вне форума Ответить с цитированием
Старый 14.09.2017, 19:09   #10
pompiduskus
юзер как все
Участник клуба
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Сообщений: 1,586
По умолчанию

сразу запускать это как, из под окон чтоли ?

Как вариант, можно сделать его исполняемым,
chmod +x ./file-name

а полом слинковать как запускемую программу

ln -s /full/path/of/file.py /user/bin/my-programm


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


$ my-programm
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/
pompiduskus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Pascal] Подскажите пишу программу работа с массивами записи Vladislav125 Помощь студентам 3 30.06.2017 09:58
Не могу открыть файл tae1980 Microsoft Office Excel 9 15.01.2013 20:58
не могу открыть файл word chortnn Microsoft Office Word 1 17.04.2011 18:24
пишу текстовик. как открыть файл на лету? Deceased Общие вопросы Delphi 17 08.03.2009 16:21
ПИШУ ПРОГРАММУкак в паскале открыть и отредактировать файл Povar Паскаль, Turbo Pascal, PascalABC.NET 4 28.04.2008 10:06