# Run a program #IP1 - fails (Python)

**URL:** <https://forum.codecrafters.io/t/run-a-program-ip1-fails-python/7866>\
**Category:** Challenges\
**Tags:** challenge:shell\
**Created:** [March 29, 2025, 11:48pm UTC](https://forum.codecrafters.io/t/run-a-program-ip1-fails-python/7866 "2025-03-29T23:48:24Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![gnidocnuf](https://yyz1.discourse-cdn.com/flex003/user_avatar/forum.codecrafters.io/gnidocnuf/32/8212_2.png) [@gnidocnuf](https://forum.codecrafters.io/u/gnidocnuf)\
**Post date:** [March 29, 2025, 11:48pm UTC](https://forum.codecrafters.io/t/run-a-program-ip1-fails-python/7866/1 "2025-03-29T23:48:24Z")

</div>

I’m stuck on Stage #IP1.

Somewhat noob here.

Here are my logs:

```auto
 [compile] Moved ./.codecrafters/run.sh → ./your_program.sh
[compile] Compilation successful.

Debug = true

[tester::#IP1] Running tests for Stage #IP1 (Run a program)
[tester::#IP1] [setup] export PATH=/tmp/baz:$PATH
[tester::#IP1] [setup] Available executables:
[tester::#IP1] [setup] - custom_exe_3064
[tester::#IP1] Running ./your_program.sh
[your-program] $ custom_exe_3064 Maria
[your-program] Program was passed 2 args (including program name).
[your-program] Arg #0 (program name): custom_exe_3064
[your-program] Arg #1: Maria
[your-program] $ 
[tester::#IP1] Output does not match expected value.
[tester::#IP1] Expected: "Program Signature: 7310207972"
[tester::#IP1] Received: "$ "
[tester::#IP1] Assertion failed.
[tester::#IP1] Test failed

View our article on debugging test failures: https://codecrafters.io/debug
(.venv) hcheema@haumaijitas-MacBook-Pro codecrafters-shell-python % codecrafters test 
Initiating test run...

Our test runners might be experiencing downtime: https://status.codecrafters.io

Running tests. Logs should appear shortly...

[compile] Moved ./.codecrafters/run.sh → ./your_program.sh
[compile] Compilation successful.

Debug = true

[tester::#IP1] Running tests for Stage #IP1 (Run a program)
[tester::#IP1] [setup] export PATH=/tmp/qux:$PATH
[tester::#IP1] [setup] Available executables:
[tester::#IP1] [setup] - custom_exe_5882
[tester::#IP1] Running ./your_program.sh
[your-program] $ custom_exe_5882 Emily
[your-program] Program was passed 2 args (including program name).
[your-program] Arg #0 (program name): custom_exe_5882
[your-program] Arg #1: Emily$ 
[tester::#IP1] Output does not match expected value.
[tester::#IP1] Expected: "Arg #1: Emily"
[tester::#IP1] Received: "Arg #1: Emily$ "
[tester::#IP1] Assertion failed.
[tester::#IP1] Test failed

```

And here’s a snippet of my code:

```python
import sys
import os 
from pathlib import Path 

def main():
    path = os.getenv("PATH")
    builtins = ["echo", "exit", "type"]

    while True:
        sys.stdout.write("$ ")
        
    # Wait for user input
        inp = input()
        inpsplit = inp.split()

        match inpsplit:
            case ["echo", *args]:
                print(*args)
            case ["exit", "0"]:
                sys.exit(0)
            case ["type", arg]:
                if arg in builtins:
                    print(f"{arg} is a shell builtin")
                elif res := search_in_dir(arg):
                    print(f"{arg} is {res}")
                else:
                    print(f"{arg}: not found")
            case _:
                if search_in_dir(inpsplit[0]):
                    print(f"Program was passed {len(inpsplit)} args (including program name).")
                    print(f"Arg #0 (program name): {inpsplit[0]}")
                    
                    for i, cm in enumerate(inpsplit[1:], start=1):
                        # print(f"Arg #{i}: {cm}")
                        sys.stdout.write(f"Arg #{i}: {cm}")
                else: 
                    print(f"{inp}: command not found")

def search_in_dir(commandName):
    dirs = os.environ["PATH"].split(":") 
    
    for d in dirs:
        path = Path(d) / commandName

        if path.exists():   
            return str(path)
    
    return None   
      
if __name__ == " __main__":
    main()

```

---

<div class="post-metadata">

**Author:** ![andy1li](https://yyz1.discourse-cdn.com/flex003/user_avatar/forum.codecrafters.io/andy1li/32/10_2.png) [@andy1li](https://forum.codecrafters.io/u/andy1li)\
**Post date:** [March 30, 2025, 6:55pm UTC](https://forum.codecrafters.io/t/run-a-program-ip1-fails-python/7866/4 "2025-03-30T18:55:29Z")

</div>

Hey @gnidocnuf, you’ll need to actually run the executable instead of hardcoding the output:

 ![image](https://canada1.discourse-cdn.com/flex003/uploads/codecrafters/original/2X/4/45ced968406e435235a895159055b4cac38ac9b3.png)

You can use [subprocess.run](https://docs.python.org/3/library/subprocess.html#subprocess.run) to execute the command and capture its output.

Let me know if you need further clarification!

---

<div class="post-metadata">

**Author:** ![gnidocnuf](https://yyz1.discourse-cdn.com/flex003/user_avatar/forum.codecrafters.io/gnidocnuf/32/8212_2.png) [@gnidocnuf](https://forum.codecrafters.io/u/gnidocnuf)\
**Post date:** [March 31, 2025, 3:07am UTC](https://forum.codecrafters.io/t/run-a-program-ip1-fails-python/7866/6 "2025-03-31T03:07:55Z")

</div>

This helped. Thank you 🙏

---

<div class="post-metadata">

**Author:** ![system](https://canada1.discourse-cdn.com/flex003/uploads/codecrafters/original/3X/7/0/700657133935c15703e22c7c8870394f6e6dc27d.svg) [@system](https://forum.codecrafters.io/u/system)\
**Post date:** [April 5, 2025, 3:08am UTC](https://forum.codecrafters.io/t/run-a-program-ip1-fails-python/7866/7 "2025-04-05T03:08:18Z")

</div>

This topic was automatically closed 5 days after the last reply. New replies are no longer allowed.
