On 07/11/2014 10:50 PM, Cameron Simpson wrote:
On 11Jul2014 20:29, Jim Byrnes <jf_byr...@comcast.net> wrote:
I've worked on this a little more. If I create a file like:
#!/usr/bin/python
import os, subprocess
subprocess.Popen(args=["gnome-terminal",
"--working-directory=/home/jfb/Documents/Prog/Python/breezygui"])
and execute it, it will take me to the correct directory. Once there
if I type in 'source bin/activate' I will get a virtualenv. However I
can't figure out how to do it from my script.
I have tried adding "--command=source bin/active" to args=
but then I get this error:
There was an error creating the child process for this terminal
Failed to execute child process "source" (No such file or directory)
To check if I could even use "--command=", I added "--command=python"
and I got a python session.
Could some one tell me what I need to do to issue the command to setup
virtualenv?
Your problem is that "source" is a shell builtin because it must affect
the shell internals, and although gnome-terminal's --command option
takes a string it does not seem to be a shell string, passed to "sh".
Instead, it seems gnome-terminal takes it upon itself to take a string
and break it up into words and expected the first word to be an
executable program i.e. "source" in your case.
Suggestions below, but first a tiny rant on the side: gnome-terminal's
command specification option is rubbish, a long standing gripe of mine
with gnome-terminal. Most decent terminal emulators take a -e option and
follow command strings (just like you're passing to subprocess.Popen).
Some are less helpful (eg OSX Terminal) and accept only a shell command;
in Terminal's case it seems to be literally typed at the terminal :-(
gnome-terminal seems to do neither.
Returning to your task:
Virtualenv is a directory to hold python modules etc and some "activate"
scripts to set up the environment so that this is used by commands.
People are generally pointed at the "bin/activate" shell file to source
to set things up, but that doesn't need to happen _inside_ the terminal.
You can do it outside and then run the terminal.
An example shell command might look like this:
cd /home/jfb/Documents/Prog/Python/breezygui
. ./bin/activate
gnome-terminal
or
cd /home/jfb/Documents/Prog/Python/breezygui; . ./bin/activate; exec
gnome-terminal
which avoids the difficulties with gnome-terminal's command line options.
So you could adapt your Popen invocation to look like this:
subprocess.Popen(args=["sh", "-c", "cd
/home/jfb/Documents/Prog/Python/breezygui; . ./bin/activate;
gnome-terminal"])
That is only one line, in case some mail program breaks it up.
Thank you, that worked. At first I thought it was not working because
when I did it manually I ended up with a prompt that looked like:
(breezygui)jfb@jims1204:~/Documents/Prog/Python/breezygui$
The script result did not have the (breezygui) at the front. Luckily I
decided to test it and when I type python I got python3.
Thanks, Jim
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor