Launching scripts in Ubuntu ?

S

Stef Mientki

hello,

I'm not familiar with Linux / Ubuntu,
still trying to get my application working under these operating systems.

I've a script "file_support.py",
now when I'm in Ubuntu, open a command window and go to the directory
where that file is,
I can launch the script with :
"python file_support.py"
and it works great

Now when I want to run the script from another script, let's call it "
test.py"
where this is the contents of test.py:

import subprocess
subprocess.Popen ( [ 'python', 'file_support.py', ] )

The script "file_support" is executed correctly,
but the python interpreter is not closed,
I've to close it manual by pressing ENTER.

What should I change ?

thanks,
Stef Mientki
 
D

Diez B. Roggisch

Stef said:
hello,

I'm not familiar with Linux / Ubuntu,
still trying to get my application working under these operating systems.

I've a script "file_support.py",
now when I'm in Ubuntu, open a command window and go to the directory
where that file is,
I can launch the script with :
"python file_support.py"
and it works great

Now when I want to run the script from another script, let's call it "
test.py"
where this is the contents of test.py:

import subprocess
subprocess.Popen ( [ 'python', 'file_support.py', ] )

The script "file_support" is executed correctly,
but the python interpreter is not closed,
I've to close it manual by pressing ENTER.

What do you mean "it's not closed"? Which window is taking the enter, and
how do you run test.py?

Diez
 
S

Stef Mientki

Diez said:
Stef Mientki wrote:

hello,

I'm not familiar with Linux / Ubuntu,
still trying to get my application working under these operating systems.

I've a script "file_support.py",
now when I'm in Ubuntu, open a command window and go to the directory
where that file is,
I can launch the script with :
"python file_support.py"
and it works great

Now when I want to run the script from another script, let's call it "
test.py"
where this is the contents of test.py:

import subprocess
subprocess.Popen ( [ 'python', 'file_support.py', ] )

The script "file_support" is executed correctly,
but the python interpreter is not closed,
I've to close it manual by pressing ENTER.

What do you mean "it's not closed"?
well the command prompt (if it is called that way in Linus) is not returned.

When I run file_support, the command window looks like this
When I run test.py (which calls fie_support) , I get this..... all kinds of output (the same as before)

Now I've to explicitly press an enter to get the command prompt back.
This might not sound important,
but the problem is somewhat more complex,
all these scripts are ran from another program,
and although everything works fine under windows,
the program hangs on Ubuntu.
So I guess that this is the (first) problem to solve.

thanks,
Stef
 
D

Diez B. Roggisch

What do you mean "it's not closed"?
well the command prompt (if it is called that way in Linus) is not
returned.

When I run file_support, the command window looks like this

When I run test.py (which calls fie_support) , I get this
.... all kinds of output (the same as before)

Now I've to explicitly press an enter to get the command prompt back.
This might not sound important,
but the problem is somewhat more complex,
all these scripts are ran from another program,
and although everything works fine under windows,
the program hangs on Ubuntu.
So I guess that this is the (first) problem to solve.

This looks odd. I've never seen a *shell* display ">>>" as prompt. So it
looks as if you mix stuff between the shell (bash, tcsh, whatever) and
python in the above. Are you *inside* the python interpreter already when
typing "python test.py"?

And if *not*, does typing e.g. "ls <return>" work for you, right after the
test.py is run? Then there is no "getting back of the prompt", it's just
that a last newline is .. well, not even missing, just not printed.
Consider this (I use $ for the shellpromt):

$ python -c "import sys;sys.stdout.write('hello')"
hello$

Additonally, you might want to check out the Popen-object-reference for the
wait-call, but actually that shouldn't change anything with regards to
pressing enter or not.

Diez
 
S

Stef Mientki

Diez said:
This looks odd. I've never seen a *shell* display ">>>" as prompt.
">>>" stands for:
stef@stef-desktop:/media/disk/Data_Python_25/support$
So it
looks as if you mix stuff between the shell (bash, tcsh, whatever) and
python in the above. Are you *inside* the python interpreter already when
typing "python test.py"?
So no
And if *not*, does typing e.g. "ls <return>" work for you, right after the
test.py is run? yes it does
Then there is no "getting back of the prompt", it's just
that a last newline is .. well, not even missing, just not printed.
Consider this (I use $ for the shellpromt):

$ python -c "import sys;sys.stdout.write('hello')"
hello$

Additonally, you might want to check out the Popen-object-reference for the
wait-call, but actually that shouldn't change anything with regards to
pressing enter or not.
ok It seems to be solved now,
In creating a small example to emphasize the problem,
I found the difference between Win and Linux:
In windows "shell=True" and in Linux "shell=False"
PID = subprocess.Popen( arguments,
cwd = cwd ,
stdout = subprocess.PIPE,
stderr = subprocess.PIPE,
shell = ( os.name == 'nt') )
so the above statement seems (at least for the moment) solve all the
problems.

thank you all,
Stef
 
G

Gabriel Genellina

ok It seems to be solved now,
In creating a small example to emphasize the problem,
I found the difference between Win and Linux:
In windows "shell=True" and in Linux "shell=False"
PID = subprocess.Popen( arguments,
cwd = cwd ,
stdout = subprocess.PIPE,
stderr = subprocess.PIPE,
shell = ( os.name == 'nt') )
so the above statement seems (at least for the moment) solve all the
problems.

I'd say there is no problem. It just *appears* to be one. The first
program finishes, and the shell displays its prompt, while the child is
still outputting things. I bet you can see the stef@stef-desktop...$
somewhere in the output.

It's like executing:
$ ls&
the shell prompt is shown as soon as the ls (background) process starts,
but gets lost in the output.

Calling wait in the parent script would prevent it to finish before the
child, avoiding the issue.
 

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,995
Messages
2,570,236
Members
46,825
Latest member
VernonQuy6

Latest Threads

Top