# PetscPOpen
Runs a program on processor zero and sends either its input or output to a file. 
## Synopsis
```
PetscErrorCode PetscPOpen(MPI_Comm comm, const char machine[], const char program[], const char mode[], FILE **fp)
```
Logically Collective, but only process 0 runs the command


## Input Parameters

- ***comm -*** MPI communicator, only processor zero runs the program
- ***machine -*** machine to run command on or NULL, or string with 0 in first location
- ***program -*** name of program to run
- ***mode -*** either r or w



## Output Parameter

- ***fp -*** the file pointer where program input or output may be read or NULL if don't care





## Notes
Use `PetscPClose()` to close the file pointer when you are finished with it

Does not work under Windows

If machine is not provided will use the value set with `PetsPOpenSetMachine()` if that was provided, otherwise
will use the machine running node zero of the communicator

The program string may contain ${DISPLAY}, ${HOMEDIRECTORY} or ${WORKINGDIRECTORY}; these
will be replaced with relevant values.


## See Also
 `PetscFOpen()`, `PetscFClose()`, `PetscPClose()`, `PetscPOpenSetMachine()`

## Level
intermediate

## Location
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/sys/fileio/mpiuopen.c.html#PetscPOpen">src/sys/fileio/mpiuopen.c</A>


---
[Edit on GitLab](https://gitlab.com/petsc/petsc/-/edit/release/src/sys/fileio/mpiuopen.c)


[Index of all Sys routines](index.md)  
[Table of Contents for all manual pages](/docs/manualpages/index.md)  
[Index of all manual pages](/docs/manualpages/singleindex.md)  
