> On 23 Aug 2020, at 20:58, Rob Cliffe via Python-list <python-list@python.org> 
> wrote:
> 
> On WIndows 10, running Python programs in a DOS box, I would like one Python 
> program to chain to another.  I.e. the first program to be replaced by the 
> second (*not* waiting for the second to finish, as with e.g. os.system).  
> This doesn't seem a lot to ask, but so far I have been unable to so this.  I 
> am using Python 3.8.3.  Some attempts so far (may be nonsensical):
> 
> ATTEMPT #1
> ----------------
> # File X1.py
> import os
> print("This is X1")
> os.execl('C:\\Python38\\python.exe', 'X2.py')

I think you need to have this (untested):

os.execl('C:\\Python38\\python.exe', 'C:\\Python38\\python.exe', 'X2.py')

You must put the path as the first arg, it is not done for you.

You version ran python without an arg so it thinks you want a interactive 
session.

Barry


> 
> # File X2.py
> print("This is X2")
> 
> When I type "X1.py", it prints "This is X1", then starts the Python 
> interactive interpreter.  Furthermore:
>     TLDR: Weird behaviour
>     Long version:  If I attempt to exit the interpreter with ctl-Z, this 
> apparently succeeds (displaying the Windows command prompt), but in reality 
> it is still in the interpreter, e.g. if I type "dir" it responds "<built-in 
> function dir>" followed by the ">>>" interpreter prompt.  And this cycle 
> (ctl-Z etc.) can be repeated ad nauseam.  If instead I try to exit from the 
> interpreter with "exit()", the cursor moves to the next line and the 
> interpreter waits for more input (but without displaying the prompt). If I 
> try "exit()" again, the whole DOS box disappears.
> 
> ATTEMPT #2
> -----------------
> # File X1.py
> import os
> print("This is X1")
> os.execl("C:\\Python38\\python.exe X2.py", '')

Arg 1 is a path to a program, not a command line.
So”python.exe” or maybe “X2.py”.


> 
> This raises ValueError: execv() arg 2 first element cannot be empty
> 
> ATTEMPT #3
> ----------------
> 
> import os, sys
> print("This is X1")
> os.execl("%s X2.py" % sys.executable, "X2.py")
> 
> This raises FileNotFoundError: [Errno 2] No such file or directory
> 
> ATTEMPT #4
> ----------------
> # File X1.py
> import os, sys
> print("This is X1")
> os.execv(sys.executable, ['X2.py'])
> 
> This behaves the same as, or similarly to, Attempt #1.
> 
> ATTEMPT #5
> ----------------
> # File X1.py
> import os
> print("This is X1")
> os.popen('python X2.py')
> 
> # File X2.py as previously
> 
>     TLDR: Really weird behaviour!
>     Long version: If I type "X1.py", it displays "This is X1" followed by the 
> DOS prompt.  If I type in a DOS command, it is executed, and the DOS prompt 
> displayed.  However, if I type in another DOS command, nothing happens except 
> that the cursor moves to the next line and waits for input (no prompt).  If I 
> type in a further DOS command, it is executed.  If I type still another DOS 
> command, I see
> 
> Exception ignored in: <io.TextIOWrapper name='<stdout>' mode='w' 
> encoding='cp1252'>
> OSError: [Errno 22] Invalid argument
> 
> and the cursor moves to the next line (no prompt).  If I type in one more DOS 
> command, it is executed, and we appear to be back to normal DOS operation.
> 
> ATTEMPT #6
> -----------------
> # File X1.py
> import subprocess, sys
> print("This is X1")
> subprocess.Popen('X2.py', executable=sys.executable)
> 
> This behaves the same as, or similarly to, Attempt #1.
> 
> ATTEMPT #7
> -----------------
> # File X1.py
> import subprocess, sys
> print("This is X1")
> subprocess.Popen('-c X2.py', executable=sys.executable)    # added -c
> 
> # File X2.py
> print("This is X2")
> 
> Some progress (maybe).  This prints "This is X1", then the DOS prompt 
> followed by "This is X2", then the cursor moves to the next line and sits 
> waiting for input (no prompt).  If I then type something in, this is 
> interpreted as a DOS command, and finally the DOS prompt is displayed.  To 
> find out more about what is happening:
> 
> ATTEMPT #8
> ----------------
> # File X1.py as above
> 
> # File X2.py
> print("This is X2")
> input("Press Enter to continue X2")
> input("Press Enter to quit X2")
> 
> If I type "X1.py", it displays:
> 
> This is X1
> C:\Python38>This is X2
> Press Enter to continue X2
> 
> Now:
>     TLDR: More weird behaviour, as if Windows and X2.py were taking turns to 
> collect lines from the console.
>     Long version: Now if I type something in and press Enter, it is 
> interpreted as a *DOS command".  Then the DOS prompt is displayed. Now if I 
> (type something and) hit Enter, I see
> 
> Press Enter to quit X2
> 
> Now if I type something and hit Enter, it is interpreted as a DOS command, 
> and the DOS prompt is displayed again.  Now if I type in a DOS command and 
> press Enter, it is ignored but the cursor moves to the next line and waits 
> for input (no prompt).  Now if I type another DOS command, it is executed.  
> Finally we appear to be done (the DOS prompt is displayed and we are back to 
> normal DOS operation).
> 
> 
> Am I missing something?  Is there a way in Windows for one Python program to 
> "chain" to another (or indeed to any executable) without waiting for the 
> latter to finish?
> Thanks in advance
> Rob Cliffe
> 
> -- 
> https://mail.python.org/mailman/listinfo/python-list

-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to