- uwsgi + python + venv + popen — не работает
- Popen python не работает
- Python-сообщество
- #1 Сен. 10, 2007 17:18:25
- проблемы при работе с popen2; subprocess
- #2 Сен. 10, 2007 17:54:09
- проблемы при работе с popen2; subprocess
- #3 Сен. 10, 2007 19:46:40
- проблемы при работе с popen2; subprocess
- #4 Сен. 10, 2007 20:12:50
- проблемы при работе с popen2; subprocess
- #5 Сен. 10, 2007 21:00:26
- проблемы при работе с popen2; subprocess
- #6 Сен. 10, 2007 21:37:17
- проблемы при работе с popen2; subprocess
- #7 Сен. 11, 2007 11:13:44
- проблемы при работе с popen2; subprocess
uwsgi + python + venv + popen — не работает
Привет, пытаюсь написать ресивер для гитовских веб хуков.
Все отлично, но в конце мне надо выполнить команду git pull.
И все работает когда скрипт запущен руками, но когда он запущен из под uwsgi , то все.
Если я использую gitpython, то на uwsgi он выдает fatal: unable to fork Если я использую Popen, то при запуске через uwsgi в stdout тишина и ничего не происходит. но при запуске с консоли все работает.
. pullcmd = ["/usr/bin/git","--git-dir=/var/www/test-repo/.git,"--work-tree=/var/www/test-repo/","pull"] p = subprocess.Popen(pullcmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) print(p.stdout.readline()) print(p.stderr.readline()) logging.info(p.stdout.readline()) logging.info(p.stderr.readline()) # or with gitpython #g = git.cmd.Git(git_dir) #try: # g.pull() #except git.exc.CommandError as e: #print(e) # return json.dumps() , 500
cat app.ini [uwsgi] module = wsgi:app master = true processes = 5 socket = /tmp/webhook.sock chmod-socket = 660 vacuum = true die-on-term = true
cat wsgi.py #!/usr/bin/env python3 from webhook import app if __name__ == "__main__": app.run()
cat /etc/systemd/system/webhook.service [Unit] Description=uWSGI instance webhook After=network.target [Service] User=www-data Group=www-data WorkingDirectory=/opt/webhook Environment="PATH=/opt/webhook/env/bin" #Environment="GIT_PYTHON_GIT_EXECUTABLE=/usr/bin/git" ExecStart=/opt/webhook/env/bin/uwsgi --ini /opt/webhook/app.ini #ExecStart=/usr/bin/uwsgi --ini /opt/webhook/app.ini [Install] WantedBy=multi-user.target
Popen python не работает
I am a beginner at python coding.
I wrote a simple code that lists a number of programs and asks the user to choose one of the programs. It will then open a website with the version history of that program, and, where it exists, run the updater of the program.
Initially I wrote the program manually writing out the list of programs (20) and then manually write out the url and, where relevant, the path and file name to the updater. Something like:
if choice == 1 url = 'https://blablabla' prg = 'C:\\Program Files\\blablabla'
After manually defining the URL and prg variables for all 20 options, I run:
webbrowser.open_new_tab(url) subprocess.Popen(prg)
Then I tried to write the code where the list of programs and the url and file paths are listed in a .csv file. The values for the url and prg variables are read from the .csv file (using numpy load.txt)
webbrowser.open_new_tab(url)
gives an error message if the file path has a blank space in it (which is in 19 out of the 20 options). The error message is:
Error:Traceback (most recent call last): File "test.py", line 32, in mainmenu() File "test.py", line 30, in mainmenu subprocess.Popen(prg) File "C:\Users\zorin\AppData\Local\Programs\Python\Python38\lib\subprocess.py", line 858, in _init__ self._execute_child(args, executable, preexec_fn, close_fds, File "C:\Users\zorin\AppData\Local\Programs\Python\Python38\lib\subprocess.py", line 1311, in _execute_child hp, ht, pid, tid = _winapi.CreateProcess(executable, args, FileNotFoundError: [WinError 2] The system cannot find the file specified
In the original (long-winded)code I manually set the full file name for Chrome:
prg = 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe'
runs Chrome without a problem.
In the updated code the same full file name is read into prg, but this time
gives the above-mentioned error code (if the file path has a black space it).
Output:C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe
so the correct value is read into the variable.
Any suggestions what I am doing wrong?
Gribouillis
(May-03-2021, 07:51 PM) herwin Wrote: In the new code
Output:C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe
No it is not correct. The path should be: «C:\Program Files\Google\Chrome\Application\chrome.exe», so without the double backlashes.
The backslash has a special meaning in Python. So to assign a string literal with backslashes you have to double the backslash to make clear you really mean one backslash.
>>> prg = 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe' >>> print(prg) C:\Program Files\Google\Chrome\Application\chrome.exe
So «prg» will contain only single backslashes.
Nowadays a more popular way to assign such a variable is to assign a raw string by putting an «r» before the string literal.
>>> prg = r'C:\Program Files\Google\Chrome\Application\chrome.exe' >>> print(prg) C:\Program Files\Google\Chrome\Application\chrome.exe
snippsat
(May-03-2021, 07:51 PM) herwin Wrote: gives the above-mentioned error code (if the file path has a black space it).
Do print(repr(prg)) then you see if there is a space.
It’s normal when read from file eg csv to use strip() so there no space at beginning or end.
>>> path = r'C:\code\file.csv ' # Looks ok,but are not >>> print(path) C:\code\file.csv >>> >>> # To see all >>> print(repr(path)) 'C:\\code\\file.csv ' >>> >>> # Fix >>> path.strip() 'C:\\code\\file.csv'
Thank you for your answer.
Unfortunately the problem remains the same
(May-03-2021, 07:51 PM) herwin Wrote: In the new code
Output:C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe
No it is not correct. The path should be: «C:\Program Files\Google\Chrome\Application\chrome.exe», so without the double backlashes.
The backslash has a special meaning in Python. So to assign a string literal with backslashes you have to double the backslash to make clear you really mean one backslash.
>>> prg = 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe' >>> print(prg) C:\Program Files\Google\Chrome\Application\chrome.exe
So «prg» will contain only single backslashes.
Nowadays a more popular way to assign such a variable is to assign a raw string by putting an «r» before the string literal.
>>> prg = r'C:\Program Files\Google\Chrome\Application\chrome.exe' >>> print(prg) C:\Program Files\Google\Chrome\Application\chrome.exe
So make sure you get rid of the double backslashes.
Thank you for your response and suggestions.
I have tried with the single and double backslashes in the csv file. The error message stays the same in both cases.
How do I read the values from the csv file into the prg variable as a raw string?
Python-сообщество
- Начало
- » Python для экспертов
- » проблемы при работе с popen2; subprocess
#1 Сен. 10, 2007 17:18:25
проблемы при работе с popen2; subprocess
Есть .exe с которым нужно общаться из питоновского скрипта. .exe запускается в интерактивном и режиме ему нужно передать пару комманд что бы он кое что посчитал, а потом забрать результат. Этот exe перед запуском считывает данные из текстового файла.
я коннекчусь через popen2:
t=popen2.popen2('c:\\lab\\manager\\sr.exe')
программа выдает ошибку: она не может считать из текстового файла; при использовании subprocess та же ерунда.
более того, когда я потом пытаюсь дать sr.exe другую команду используя
получаю:
Traceback (most recent call last):
File “”, line 1, in ?
IOError: Invalid argument
в чем дело?
работаю под win; хотя в дальнейшем этот скрипт надо будет запускать и под nix =(
#2 Сен. 10, 2007 17:54:09
проблемы при работе с popen2; subprocess
почитайте про параметр stdin функции subprocess.Popen
#3 Сен. 10, 2007 19:46:40
проблемы при работе с popen2; subprocess
читал, читаю, все равно не работает:
p = Popen(, shell=True, stdin=PIPE, stdout=PIPE)
Traceback (most recent call last):
File “”, line 1, in ?
File “C:\Python24\lib\subprocess.py”, line 533, in __init__
(p2cread, p2cwrite,
File “C:\Python24\lib\subprocess.py”, line 623, in _get_handles
errwrite = self._make_inheritable(errwrite)
File “C:\Python24\lib\subprocess.py”, line 634, in _make_inheritable
DUPLICATE_SAME_ACCESS)
TypeError: an integer is required
и все еще не ясно, почему программа из внешнего файла обламывается читать?
Отредактировано (Сен. 10, 2007 19:47:20)
#4 Сен. 10, 2007 20:12:50
проблемы при работе с popen2; subprocess
p = Popen(“somefile.exe”, shell=True, stdin=PIPE, stdout=PIPE)
#5 Сен. 10, 2007 21:00:26
проблемы при работе с popen2; subprocess
>p = Popen(“somefile.exe”, shell=True, stdin=PIPE, stdout=PIPE)
тоже пробовал эффект тот же.
заметил другое, что если запускаю из под PyCrust который использует pythonw.exe то ни чегео не работает. Если из под обычного python.exe то все работает, только несколько не так, как мне кажется это должно работать:
>>> from subprocess import *
>>> p = Popen('c:\\windows\\system32\\cmd.exe',stdin=PIPE,stdout=PIPE,shell=True)
>>> print p.communicate('dir')
('Microsoft Windows XP [\x82\xa5\xe0\xe1\xa8\xef 5.1.2600]\r\n(\x91) \x8a\xae\xe0\xaf\xae\xe0\xa0\xe6\xa8\xef \x8c\xa0\xa9\xaa\xe0\xae\xe1\xae\xe4\xe2, 1985-2001.\r\n\r\nC:\\Documents and Settings\\Smit>\x8f\xe0\xae\xa4\xae\xab\xa6\xa8\xe2\xec? ', None)
>>> print p.communicate('dir')
Traceback (most recent call last):
File "C:\Program Files\Wing IDE 2.1\src\debug\server\_sandbox.py", line 1, in ?
# Used internally for debug sandbox under external interpreter
File "C:\Python24\Lib\subprocess.py", line 783, in communicate
self.stdin.write(input)
ValueError: I/O operation on closed file
>>>
сообствено вопросов два: почему не выполнена команда dir и почему cmd закрылось?
программа sc.exe при запуске читает подготовленную ей информацию из файла index.txt лежащего с ней в одном каталоге, однако этого не происходит.
#6 Сен. 10, 2007 21:37:17
проблемы при работе с popen2; subprocess
самое печальное, что из .py файла
import subprocess as sub
p = sub.Popen(‘sr.exe’, stdin=sub.PIPE)
print p.communicate(‘?\n’)
работает, из консолей wingIDE, PyCrust — нет.
p.s. вопрос, кажется, закрыт. bialix спасибо за моральну поддержку
Отредактировано (Сен. 10, 2007 21:38:22)
#7 Сен. 11, 2007 11:13:44
проблемы при работе с popen2; subprocess
$m1t
File “C:\Program Files\Wing IDE 2.1\src\debug\server\_sandbox.py”, line 1, in ?
# Used internally for debug sandbox under external interpreter
сообствено вопросов два: почему не выполнена команда dir и почему cmd закрылось?
Ответ собственно один – при запуске из-под отладчика программы ведут себя немного по-другому.
программа sc.exe при запуске читает подготовленную ей информацию из файла index.txt лежащего с ней в одном каталоге, однако этого не происходит. Ключевое слово – лежит в одном каталоге. Если программа sc.exe запускается не из своего каталога, то относительный путь к файлу index.txt будет не тот, что ожидаешь. Поэтому программе sc.exe нужно определять полный путь к своему exe и потом корректировать этот путь, чтобы прочитать index.txt
Самые известные “невидимые” грабли.