Добавьте путь версии pyenv в исполняемый файл [duplicate]

Если FTP-прокси позволяет указать всю информацию о цели с помощью команд USER и PASS, вы можете использовать свойство Credentials .

Как правило, вы указываете имя пользователя в форме user@proxyuser@host и пароль в форме password@proxypassword:

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://proxy/path");
request.Credentials = new NetworkCredential("user@proxyuser@host", "password@proxypassword");

Если прокси не требует аутентификации, используйте форму user@host и password:

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://proxy/path");
request.Credentials = new NetworkCredential("user@host", "password");

Но ваш прокси-сервер может также потребовать другого синтаксиса, например:

  • отдельных USER команд для прокси-сервера пользователь и целевой пользователь хоста
  • OPEN команда
  • SITE команда

В этих случаях вы не можете использовать FtpWebRequest. Вы должны использовать стороннюю FTP-клиентскую библиотеку.

Например, с помощью WinSCP .NET assembly вы можете использовать:

// Setup session options
SessionOptions sessionOptions = new SessionOptions
{
    Protocol = Protocol.Ftp,
    HostName = "host",
    UserName = "user",
    Password = "password",
};

// Configure proxy
sessionOptions.AddRawSettings("ProxyHost", "proxy");
sessionOptions.AddRawSettings("FtpProxyLogonType", "2");
sessionOptions.AddRawSettings("ProxyUsername", "proxyuser");
sessionOptions.AddRawSettings("ProxyPassword", "proxypassword");

using (Session session = new Session())
{
    // Connect
    session.Open(sessionOptions);

    // Your code
}

Для параметров для SessionOptions.AddRawSettings , см. исходные настройки .

Легче настроить параметры прокси-сервера в графическом интерфейсе WinSCP и он создает для вас код кода FTP C # .

Обратите внимание, что сборка WinSCP .NET не является родной библиотекой .NET. Это довольно тонкая оболочка .NET поверх консольного приложения.

(я автор WinSCP)

3
задан PatB 24 January 2013 в 16:47
поделиться

4 ответа

Общее решение состоит в том, чтобы изменить shebang на

#!/usr/bin/env python2.6

. Затем просто установите ваш PATH, чтобы указать на правый python2.6 на каждой машине.

5
ответ дан choroba 22 August 2018 в 18:57
поделиться
  • 1
    Как я уже упоминал, мы не можем использовать этот путь. – PatB 24 January 2013 в 12:32
  • 2
    Почему вы можете использовать одну переменную среды (MY_PYTHON_PATH), но не другую (PATH)? – chepner 24 January 2013 в 16:21
  • 3
    @chepner Видимо, речь идет не о чистом использовании, это действительно было бы тривиально. Речь идет об изменении PATH, а затем использовании его для этой цели. Поскольку PATH используется в масштабах всей системы, это может иметь нежелательные последствия. Более разумно использовать выделенный env var MY_PYTHON_PATH без оговорок. – Perleone 25 January 2013 в 02:29
  • 4
    Да, это совершенно правильно. Поскольку я продолжаю указывать we_cannot_use_the_path . Я в конце концов остановился на решении «multiline shebang», которое я разместил выше, и считаю его лучшим решением, хотя я отмечаю, что не получил никаких баллов за это :-( – PatB 12 March 2013 в 15:59

Мы можем сделать:

#!/bin/bash
"exec" "python" "$0"

print "Hello World"

из http://rosettacode.org/wiki/Multiline_shebang#Python

0
ответ дан PatB 22 August 2018 в 18:57
поделиться
  • 1
    Не держите это, это работает из командной строки, но не после shebang. Grr. – PatB 24 January 2013 в 17:22

Записать сценарий оболочки оболочки. Если у вас есть script.py, напишите script.py.sh со следующим содержимым:

#!/bin/bash
PYTHON_SCRIPT=$( echo "$0" | sed -e 's/\.sh$//' )
exec $MY_PYTHON_PATH $PYTHON_SCRIPT "$@"

Отказ от ответственности: это не проверено, просто написано это с моей головы.

Теперь просто настройте MY_PYTHON_PATH на каждом компьютере и вызовите script.py.sh вместо script.py.

Резюме Это решение является только вторым, поскольку оно требует много вызовов сценариев, которые должны быть изменены с script.py на script.py.sh, чего следует избегать, если это вообще возможно.


Альтернатива

Используйте env для вызова сценарий python-finder, который просто вызывает двоичный код python, содержащийся в $MY_PYTHON_PATH. Скрипт python-finder должен находиться в одном месте на обеих машинах, при необходимости использовать символические ссылки.

#!/usr/bin/env /usr/local/bin/python-finder.sh

Содержимое python-finder.sh:

#!/bin/bash
exec $MY_PYTHON_PATH "$@"

Это работает, потому что для сценариев интерпретатора (те, которые начинаются с shebang) execve вызывает интерпретатор и передает имя файла в env, которое, в свою очередь, передает его команде, которую она вызывает.

2
ответ дан Perleone 22 August 2018 в 18:57
поделиться
  • 1
    Спасибо, что это текущий план на самом деле, и он отлично работает :. Просто у нас есть много людей и сценариев автоматизации, которые должны будут изменить свою практику работы, если мы это сделаем, и поэтому мне было интересно, можем ли мы сделать это на линии shebang вместо этого, поскольку это действительно линекс-версия командной строки, а чем сценарий python. Я отредактирую вопрос, чтобы отразить это сейчас! – PatB 24 January 2013 в 15:55
  • 2
    @PatB Использует ли мое альтернативное предложение для вас? Он ограничен линией shebang. – Perleone 25 January 2013 в 01:09
0
ответ дан PatB 5 November 2018 в 16:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: