Set program name through exec -a or environment variable

Hi, I would like to know if you're open to supporting `exec -a` or an environment variable for setting `argv[0]`, and have some pointers as to where that should be implemented. On Nixpkgs we typically use wrappers to set environment variables like PATH or PYTHONPATH for individual programs. Consider a program named `prog`. We move the original program `prog` to `.prog-wrapped` and then create a wrapper `prog` that does `exec -a prog .prog-wrapped`. Unfortunately `exec -a` does not work with Python. The process is still named `.prog-wrapped` (although that's not really a problem) but worse, `sys.argv[0]` is also `.prog-wrapped`. Currently we inject some code in programs that sets `sys.argv=[0] = "prog" but this is fragile and I would prefer to get rid of this. Kind regards, Frederik

exec -a would seem to end up setting argv[0] on the CPython interpreter itself, which I don't think is the desired effect... -- Ryan (ライアン) Yoko Shimomura > ryo (supercell/EGOIST) > Hiroyuki Sawano >> everyone else http://refi64.com On Mar 18, 2017 10:11 AM, "Freddy Rietdijk" <freddyrietdijk@fridh.nl> wrote:
Hi,
I would like to know if you're open to supporting `exec -a` or an environment variable for setting `argv[0]`, and have some pointers as to where that should be implemented.
On Nixpkgs we typically use wrappers to set environment variables like PATH or PYTHONPATH for individual programs. Consider a program named `prog`. We move the original program `prog` to `.prog-wrapped` and then create a wrapper `prog` that does `exec -a prog .prog-wrapped`.
Unfortunately `exec -a` does not work with Python. The process is still named `.prog-wrapped` (although that's not really a problem) but worse, `sys.argv[0]` is also `.prog-wrapped`. Currently we inject some code in programs that sets `sys.argv=[0] = "prog" but this is fragile and I would prefer to get rid of this.
Kind regards,
Frederik
_______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/ rymg19%40gmail.com

On Sat, Mar 18, 2017 at 10:27:58AM -0500, Ryan Gonzalez <rymg19@gmail.com> wrote:
exec -a would seem to end up setting argv[0] on the CPython interpreter itself, which I don't think is the desired effect...
That's exactly what OP asked -- how to change that?
-- Ryan (????????????) Yoko Shimomura > ryo (supercell/EGOIST) > Hiroyuki Sawano >> everyone else http://refi64.com
On Mar 18, 2017 10:11 AM, "Freddy Rietdijk" <freddyrietdijk@fridh.nl> wrote:
I would like to know if you're open to supporting `exec -a` or an environment variable for setting `argv[0]`, and have some pointers as to where that should be implemented.
On Nixpkgs we typically use wrappers to set environment variables like PATH or PYTHONPATH for individual programs. Consider a program named `prog`. We move the original program `prog` to `.prog-wrapped` and then create a wrapper `prog` that does `exec -a prog .prog-wrapped`.
Unfortunately `exec -a` does not work with Python. The process is still named `.prog-wrapped` (although that's not really a problem) but worse, `sys.argv[0]` is also `.prog-wrapped`. Currently we inject some code in programs that sets `sys.argv=[0] = "prog" but this is fragile and I would prefer to get rid of this.
Kind regards,
Frederik
Oleg. -- Oleg Broytman http://phdru.name/ phd@phdru.name Programmers don't die, they just GOSUB without RETURN.

Oleg Broytman wrote:
On Sat, Mar 18, 2017 at 10:27:58AM -0500, Ryan Gonzalez <rymg19@gmail.com> wrote:
exec -a would seem to end up setting argv[0] on the CPython interpreter itself, which I don't think is the desired effect...
That's exactly what OP asked -- how to change that?
Maybe python itself should have an -a option, so that python -a blarg foo.py would run foo.py with sys.argv[0] == 'blarg'. -- Greg

Hi! On Sat, Mar 18, 2017 at 02:15:12PM +0100, Freddy Rietdijk <freddyrietdijk@fridh.nl> wrote:
I would like to know if you're open to supporting `exec -a` or an
Not everyone here knows what `exec -a` is so let me say that it's a bashism that sets program's name. `exec prog` is interpreted as a system call `exec('prog', 'prog')` and `exec -a name prog` is interpreted as `exec('prog', 'name')`. Currently sys.argv[0] is the name of the script and it should stay that way. But it would be interesting to preserve argv[0] from C and expose it via sys in addition to sys.executable. Something like sys.original_prog_name. Then the OP can do anything application-specific -- set sys.argv[0], call setproctitle, whatever.
Kind regards,
Frederik
Oleg. -- Oleg Broytman http://phdru.name/ phd@phdru.name Programmers don't die, they just GOSUB without RETURN.

On 19 March 2017 at 01:42, Oleg Broytman <phd@phdru.name> wrote:
Hi!
On Sat, Mar 18, 2017 at 02:15:12PM +0100, Freddy Rietdijk < freddyrietdijk@fridh.nl> wrote:
I would like to know if you're open to supporting `exec -a` or an
Not everyone here knows what `exec -a` is so let me say that it's a bashism that sets program's name. `exec prog` is interpreted as a system call `exec('prog', 'prog')` and `exec -a name prog` is interpreted as `exec('prog', 'name')`.
Currently sys.argv[0] is the name of the script and it should stay that way. But it would be interesting to preserve argv[0] from C and expose it via sys in addition to sys.executable. Something like sys.original_prog_name. Then the OP can do anything application-specific -- set sys.argv[0], call setproctitle, whatever.
There are a lot of other ways that the C level argv contents can differ from what's published in "sys.argv" (especially when things are run with -m, -c, or by executing a zipfile or directory rather than a Python script directly). https://bugs.python.org/issue14208 proposes offering an attribute like "sys._raw_argv" to get the full details of how Python was invoked. Cheers, Nick. -- Nick Coghlan | ncoghlan@gmail.com | Brisbane, Australia

https://pypi.python.org/pypi/setproctitle From: Python-Dev [mailto:python-dev-bounces+tritium-list=sdamon.com@python.org] On Behalf Of Freddy Rietdijk Sent: Saturday, March 18, 2017 9:15 AM To: Python-Dev <python-dev@python.org> Subject: [Python-Dev] Set program name through exec -a or environment variable Hi, I would like to know if you're open to supporting `exec -a` or an environment variable for setting `argv[0]`, and have some pointers as to where that should be implemented. On Nixpkgs we typically use wrappers to set environment variables like PATH or PYTHONPATH for individual programs. Consider a program named `prog`. We move the original program `prog` to `.prog-wrapped` and then create a wrapper `prog` that does `exec -a prog .prog-wrapped`. Unfortunately `exec -a` does not work with Python. The process is still named `.prog-wrapped` (although that's not really a problem) but worse, `sys.argv[0]` is also `.prog-wrapped`. Currently we inject some code in programs that sets `sys.argv=[0] = "prog" but this is fragile and I would prefer to get rid of this. Kind regards, Frederik

On 18.03.17 15:15, Freddy Rietdijk wrote:
I would like to know if you're open to supporting `exec -a` or an environment variable for setting `argv[0]`, and have some pointers as to where that should be implemented.
On Nixpkgs we typically use wrappers to set environment variables like PATH or PYTHONPATH for individual programs. Consider a program named `prog`. We move the original program `prog` to `.prog-wrapped` and then create a wrapper `prog` that does `exec -a prog .prog-wrapped`.
Unfortunately `exec -a` does not work with Python. The process is still named `.prog-wrapped` (although that's not really a problem) but worse, `sys.argv[0]` is also `.prog-wrapped`. Currently we inject some code in programs that sets `sys.argv=[0] = "prog" but this is fragile and I would prefer to get rid of this.
You can move the original program `prog` into the subdirectory `.wrapped` and then create a wrapper `prog` that does `exec .wrapped/prog` or `exec python3 .wrapped/prog`.
participants (7)
-
Freddy Rietdijk
-
Greg Ewing
-
Nick Coghlan
-
Oleg Broytman
-
Ryan Gonzalez
-
Serhiy Storchaka
-
tritium-list@sdamon.com