Getting real argv[0] in python

S

Stuart D. Gathman

I need to be able to obtain the real argv[0] (not the script name).
The application is writing a CUPS backend in python. For some reason,
CUPS decided to pass the URI as argv[0] (perhaps to ensure that CUPS
will only ever run on Unix, since CUPS stands for Common *Unix*
Printing System). The only solution I can think of is to write a C
wrapper that inserts the original argv[0] before execing python with
the script.

Is there already a way to do this that I have missed?
 
S

Stuart D. Gathman

I need to be able to obtain the real argv[0] (not the script name).
The application is writing a CUPS backend in python. For some reason,
CUPS decided to pass the URI as argv[0] (perhaps to ensure that CUPS
will only ever run on Unix, since CUPS stands for Common *Unix*
Printing System). The only solution I can think of is to write a C
wrapper that inserts the original argv[0] before execing python with
the script.

Is there already a way to do this that I have missed?

Here is the simple C wrapper I am using:

#include <stdio.h>
#include <string.h>
#include <unistd.h>

static const char scriptdir[] = "/usr/lib/cups/python/";

int main(int argc,char **argv) {
char *nargv[10];
char script[256];
const char *p;
int i;
int slen,len;
if (argc > 7) {
fputs("Usage: pycups uri ...",stderr);
return 1;
}

p = strchr(argv[0],':');
if (p)
len = p - argv[0];
else
len = strlen(argv[0]);
slen = strlen(scriptdir);
strcpy(script,scriptdir);
if (len + slen + 4 > sizeof script)
len = sizeof script - slen - 4;
strncat(script,argv[0],len);
script[slen + len] = 0;
strcat(script,".py");

nargv[0] = "python2";
nargv[1] = script;
for (i = 0; i < argc; ++i)
nargv[i+2] = argv;
nargv[i+2] = 0;
execvp("python2",nargv);
perror("exec");
return 1;
}
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,770
Messages
2,569,583
Members
45,073
Latest member
DarinCeden

Latest Threads

Top