homepage

This issue tracker has been migrated to GitHub , and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Real argc and argv in embedded interpreter
Type: enhancement Stage: resolved
Components: Extension Modules, Interpreter Core Versions: Python 3.9
process
Status: closed Resolution: duplicate
Dependencies: Superseder: Add sys.orig_argv: original command line arguments passed to the Python executable
View: 23427
Assigned To: Nosy List: belopolsky, eric.snow, nordaux, petr.viktorin, piro, vstinner
Priority: normal Keywords:

Created on 2012年08月07日 20:38 by nordaux, last changed 2022年04月11日 14:57 by admin. This issue is now closed.

Messages (7)
msg167639 - (view) Author: nordaux (nordaux) Date: 2012年08月07日 20:38
I have found out certain peculiarity of interpreter in case it is embedded.
There is no way to reference to the real parameters argv, argc of main process from embedded python's C extensions.
When python is not embedded, it is task of function Py_Main, which sets the value of variables orig_argv, orig_argc.
These variables keep references to the original values of argv, argc and give opportunity to manage them from the python C extensions if necessary.
I understand that the function Py_GetArgcArgv is rarely used, and this is true, but still believe that ability to manipulate these variables should be exist in any form of python from its C extension modules.
I tried different modules of C-extensions with such functional in embedded environment, but they all causes Segmentation Fault. The problem is not only in their implementation quality without any additional inspections, but also the function Py_GetArgcArgv doesn't additionally reported that its returned, and just ruturn null pointer in self argv parameter when used in embedded environment.
The following quote all the code that refers to this functionality in Python 2.7-3.3 at the moment:
/* For Py_GetArgcArgv(); set by main() */
static char **orig_argv;
static int orig_argc;
..........................................................................................
/* Main program */
int
Py_Main(int argc, char **argv)
{
..........................................................................................
 orig_argc = argc; /* For Py_GetArgcArgv() */
 orig_argv = argv;
..........................................................................................
}
void
Py_GetArgcArgv(int *argc, char ***argv)
{
 *argc = orig_argc;
 *argv = orig_argv;
}
Thats why I would like to suggest something similar to such function and use it in Py_Main and probably make it available from Python C API.
And also extend Py_GetArgcArgv with more detailed null pointer handling if variables orig_argv, orig_argc had not been initialized.
void
Py_InitArgcArgv(int *argc, char ***argv)
{
 if(! *argv) return -1;
 orig_argc = *argc; /* For Py_GetArgcArgv() */
 orig_argv = *argv;
 return 0; 
}
Would like to see other suggestions.
Thanks.
msg222777 - (view) Author: Mark Lawrence (BreamoreBoy) * Date: 2014年07月11日 18:39
Without a patch this issue will go nowhere. I'm assuming that this limitation must have been overcome by other projects using embedded Python. Has anybody got any ideas as to how, I certainly haven't?
msg353242 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2019年09月26日 00:44
I only saw one request (this issue) for this feature, in 2012. So it doesn't sound really important. I close the issue.
msg370965 - (view) Author: Petr Viktorin (petr.viktorin) * (Python committer) Date: 2020年06月08日 07:54
FWIW, another project that needs Py_GetArgcArgv is "setproctitle": https://bugzilla.redhat.com/show_bug.cgi?id=1792059
See also: https://github.com/cherrypy/cherrypy/issues/1506 
msg370966 - (view) Author: Daniele Varrazzo (piro) * Date: 2020年06月08日 08:43
Py_GetArgcArgv gone broke setproctitle indeed.
https://github.com/dvarrazzo/py-setproctitle/issues/76
Is there a way to get the same feature in 3.9 or should setproctitle become no-op from 3.9 on and Python loses this feature?
Thank you.
msg371026 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2020年06月08日 17:18
I mark this issue as a duplicate of bpo-23427.
msg371029 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2020年06月08日 17:25
See also bpo-40910: "Py_GetArgcArgv() is no longer exported by the C API".
History
Date User Action Args
2022年04月11日 14:57:33adminsetgithub: 59782
2020年06月08日 17:25:56vstinnersetmessages: + msg371029
2020年06月08日 17:18:11vstinnersetsuperseder: Add sys.orig_argv: original command line arguments passed to the Python executable
resolution: out of date -> duplicate
messages: + msg371026
2020年06月08日 08:43:40pirosetnosy: + piro

messages: + msg370966
versions: + Python 3.9, - Python 3.5
2020年06月08日 07:54:56petr.viktorinsetnosy: + petr.viktorin
messages: + msg370965
2019年09月26日 00:44:19vstinnersetstatus: open -> closed

nosy: + vstinner
messages: + msg353242

resolution: out of date
stage: resolved
2019年04月26日 19:01:28BreamoreBoysetnosy: - BreamoreBoy
2014年07月11日 18:39:06BreamoreBoysetversions: + Python 3.5, - Python 2.7, Python 3.2, Python 3.3
nosy: + BreamoreBoy

messages: + msg222777

type: crash -> enhancement
2012年11月13日 05:05:09eric.snowsetnosy: + eric.snow
2012年08月10日 17:28:33belopolskysetnosy: + belopolsky
2012年08月08日 05:20:47Ramchandra Aptesettitle: Real Argc Argv in embedded interpreter -> Real argc and argv in embedded interpreter
2012年08月07日 20:42:54nordauxsettitle: Real Argc Argv in embeded interpreter -> Real Argc Argv in embedded interpreter
2012年08月07日 20:38:29nordauxcreate

AltStyle によって変換されたページ (->オリジナル) /