> On 23 Aug 2020, at 20:58, Rob Cliffe via Python-list <[email protected]>
> 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